Base | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar base

C# Programımızın Ekrandaki Yerini Hatırlaması

10 March 2010 2 yorum

C# ile yazdığınız uygulamanın her açılışta bir önceki kapatıldığı yerde açılmasını isteyebilirsiniz.

Aslında gayet basit olan bu işi yaparken düşünmemiz gereken bazı detaylar var. Mesela;

Ya uygulama kapatıldıktan sonra kullanıcı windows’un çözünürlüğünü değiştirdiyse?

Kullanıcı birden fazla monitör kullanıyorsa, ve uygulama kapatıldıktan sonra monitörlerin ayarlarını değiştirdiyse?

Hem bu noktaları gözönünde bulunduracak, hem de kolay şekilde programlanacak bir çözümü aşağıda kodladım;

Öncelikle formumuz kapatılırken, tam olarak bulunduğu noktayı bir yere kaydetsin. Bunu uygulamanın Settings penceresine iki tane özellik ekleyerek yapalım;

FormLocation ve FormSize

Formumuzun base class‘ı olan Form class‘ından gelen OnClosing virtual method’unu override edelim;

protected override void OnClosing(CancelEventArgs e)
{
	Properties.Settings.Default.FormLocation = this.Location;
	Properties.Settings.Default.FormSize = this.Size;
	Properties.Settings.Default.Save();

	base.OnClosing(e);
}

Uygulamamızın Settings penceresinden eklediğimiz property‘lere

Properties.Settings.Default

ile ulaşabiliriz.

Şimdi, form’umuzun base’den gelen OnLoad virtual method‘unu override edelim ve açıldığında eski yerine konumlanmasını sağlayalım;

protected override void OnLoad(EventArgs e)
{
	base.OnLoad(e);

	Point konum = Properties.Settings.Default.FormLocation;
	Size boyut = Properties.Settings.Default.FormSize;

	bool isOnScreen = false; /// Formun gözükür olup-olmadığını kontrol edelim
	foreach (Screen screen in Screen.AllScreens)
		if (screen.WorkingArea.Contains(konum))
			isOnScreen = true;

	if (!isOnScreen) ///Eğer formumuz görünür değilse, görünür yapalım
		this.SetDesktopLocation(Screen.PrimaryScreen.WorkingArea.Left, Screen.PrimaryScreen.WorkingArea.Top);

	if (boyut.Width < 10 || boyut.Height < 10) /// Formun boyutları çok küçükse, normal hale geri getirelim
		this.Size = new Size(300, 300);
}

Yukarıdaki kod parçalarını sizler de kendi uygulamalarınızda kullanabilirsiniz.

virtual olmayan method’ları override etmek

23 February 2010 1 yorum

Base class‘ta tanımlanmış bir method‘u override etmemiz gerekiyor. Fakat method virtual yazılmamışsa, override edilemez. Türetilmiş class‘ta base class‘taki virtual olmayan method’u nasıl override edebiliriz?

Türetilmiş class’ta base class’taki method’u override etmek yerine new anahtar kelimesi ile baştan yazabiliriz. Böylece virtual yazılmamış ve dolayısıyla override edilemeyecek method’ları “bir çeşitoverride etmiş oluruz.

class Base
{
	public virtual void VirtualGoster()
	{
		Console.WriteLine(“Base.VirtualGoster”);
	}

	public void Goster()
	{
		Console.WriteLine(“Base.Goster”);
	}
}

class Derived : Base
{
	public override void VirtualGoster()
	{
		Console.WriteLine(“Derived.VirtualGoster”);
	}

	public new void Goster()
	{
		Console.WriteLine(“Derived.Goster”);
	}
}

class Program
{
	static void Main(string[] args)
	{
		Base base = new Derived();
		base.VirtualGoster();
		base.Goster();

		Console.WriteLine();

		Derived derived = new Derived();
		derived.VirtualGoster();
		derived.Goster();
	}
}

Çıktı :
Derived.VirtualGoster
Base.Goster
Derived.VirtualGoster
Derived.Goster