WindowsFormsApplicationBase Sınıfı
4/10/2009C# uygulamaları hakkında değişik kaynkalarda yazılanlara bakılacak olunursa projenin başlangıç formunun örneği alınıp Application sınıfının Run() metoduna parametre olarak verilmektedir. Bu işlem yani projenin başlangıç formunu hazırlama işlemi Main() metodunun bulunduğu Program.cs dosyasında yapılmaktadır. Microsoft.VisualBasic.ApplicationServices’deki WindowsFormsApplicationBase sınıfından yararlanarak C# uygulamasının başlangıç ve açılış formuyla ilgili bazı işlemleri kolayca yapmak mümkündür. Daha çok Visual Basic programcılarının kullandığı bu sınıftan C# uygulaması dahilinde yararlanmak istiyorsanız Add Reference diyalog kutusundan yararlanıp Microsoft.VisualBasic adlı referansı Solution Explorer penceresinde listelemelisiniz.
Devamında kod satırlarının kısa olmasını sağlamak için using deyimiyle Microsoft.VisualBasic.ApplicationServices’deki sınıflardan yararlanmak istediğinizi belirtmeniz önerilir. Bu sınıf hakkında adım adım bilgi verebilmek içinProgram.cs dosyasında aşağıdaki gibi WindowsFormsApplicationBase sınıfının mirasçısı bir sınıf hazırladık. “App_sinifi” adı verilen bu sınıf bu hali ile herhangi bir işleve sahip değildir. Daha önce herhangi bir C# kitabında bu sınıf hakkında bilgi verilmediği için değişken adı çalmaktan suçlanma ihtimali düşük olduğu için bu sınıfa argo bir isim vermeye gerek duymadım.
namespaceWindowsFormsApplication1
{
static class Program
{
static voidMain()
{
Application.Run(new Form1());
}
}
public classApp_sinifi : WindowsFormsApplicationBase
{
}
}
WindowsFormsApplicationBase sınıfının mirasçısı bu sınıfın nasıl kullanıldığına örnek olması için ilk olarak OnCreateMainForm() metodunu ezdik. Bu metodun içinde projedeki ilk formun yani Form1 sınıfının örneğini alıp WindowsFormsApplicationBase tipindeki nesnenin MainForm özelliğine aktardık.
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
this.MainForm = F1;
}
}
Bu şartlarda Run() metodu içinde bu sınıfın WindowsFormsApplicationBase mirasçısı sınıfınınörneği alınıp bu sınıfın Run() metoduna parametre olarak verilirse “F1” nesnesi uygulamanın başlangıç formu olur. Aşağıda verilen haliyle Program.cs dosyası ile Visual Studio tarafından hazırlanan hali işlev bakımından birbirinden farklı değildir.
usingMicrosoft.VisualBasic.ApplicationServices;
usingSystem.Windows.Forms;
namespaceWindowsFormsApplication1
{
static class Program
{
static voidMain(string[] parametre)
{
App_sinifibaslangic;
baslangic = new App_sinifi();
baslangic.Run(parametre);
}
}
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
this.MainForm = F1;
}
}
}
Hangi formun uygulamanın başlangıç formu olmasını istiyorsanız bu formun adını WindowsFormsApplicationBase sınıfının mirasçısı sınıfın MainForm özelliğine aktarmalısınız. Her ne kadar WindowsFormsApplicationBase sınıfının mirasçısı bu sınıfı Progam.cs dosyası içinde hazırlamış olsak bile başka bir kod dosyasında kodlayabilirdik. Başlangıç formu olarak Visual Studio’nun projeye dahil ettiği ilk formu kullanmak istediğimiz için böyle bir düzenleme yaptık. Bu sınıfın override edilecek başka metotları ve kendisi için metot hazırlanabilinecek birkaç olayı olsa bile şimdilik bu kadarıyla yetindik.
Şimdi WindowsFormsApplicationBase sınıfının mirasçısı sınıftan yararlanıp mevcut bir formu Splash form olarak ekrana getireceğim. Bu amaçla üzerinde çalıştığım projeye 2. bir form dahil ettim ve bu forma “splash_form” adını verdim. Ardından “Program.cs” dosyasındaki WindowsFormsApplicationBase sınıfının mirasçısı sınıfta OnCreateSplashScreen metodunu aşağıdaki gibi ezdim(override) ettim.
usingMicrosoft.VisualBasic.ApplicationServices;
namespaceWindowsFormsApplication1
{
static class Program
{
static voidMain(string[] parametre)
{
App_sinifibaslangic;
baslangic = new App_sinifi();
baslangic.Run(parametre);
}
}
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
this.MainForm = F1;
}
protected override voidOnCreateSplashScreen()
{
splash_formf_splash = new splash_form();
this.SplashScreen = f_splash;
}
}
}
Bu hazırlıktan sonra proje çalıştırılırsa öncelikle adı WindowsFormsApplicationBase sınıfının mirasçısı sınıfın SplashScreen özelliğine aktarılan form ekrana getirilir. Bu form ekranda kısa bir süre durduktan sonra adı MainForm özelliğine aktarılan form ekrana gelir.
Şimdi ise WindowsFormsApplicationBase sınıfı kaynaklı OnRun() metodunu override edeceğim. Bu amaçla yukarıda verdiğim sınıfı aşağıdaki gibi düzenledim. Bu şartlarda bu sınıfın örneği alınıp Run() metodu işletildiğinde önce OnRun, ardından OnCreateMainForm metodu işletilir.
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
this.MainForm = F1;
}
protected override voidOnCreateSplashScreen()
{
splash_formf_splash = new splash_form();
this.SplashScreen = f_splash;
}
protected override voidOnRun()
{
base.OnRun();
}
}
Bu şartlarda OnRun metodunun varlığı ile yokluğu birdir. Çünkü bu metodun orijinali zaten böyledir. Şimdi konu üzerinde düşünmenizi sağlamak için bu metoda bir satır ekleyeceğim.
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
this.MainForm = F1;
}
protected override voidOnCreateSplashScreen()
{
splash_formf_splash = new splash_form();
this.SplashScreen = f_splash;
}
protected override voidOnRun()
{
base.OnRun();
MessageBox.Show("Uygulama çalışmaya başladı");
}
}
OnRun() metodunu bu şekilde değiştirip proje çalıştırılırsa doğal olarak base.OnRun() satırı sayesinde uygulama başlatılır. Tabii sıranın MessageBox sınıfının kullanıldığı satıra gelmesi için uygulamanın çalışmasının sona erdirilmesi gerekir. Tahmin edeceğiniz gibi bu metottaki base.OnRun() satırı silinirse uygulama çalışmaz. WindowsFormsApplicationBase sınıfı kaynaklı OnRun() metodu uygulama çalışmaya başladıktan sonra işletilmektedir. Bu sınıfın ayrıca OnStartUp adında bir metodu var. Kendi hazırladığım sınıfta bu metodu aşağıdaki gibi Override ettim.
public class App_sinifi: WindowsFormsApplicationBase
{
protected override voidOnCreateMainForm()
{
Form1F1 = new Form1();
0 yorum yazilmistir