Visual Basic kitabımdan yararlanarak hazırladığım bu makalenin içeriğinin benzerine yerli ve yabancı kaynaklarda rastlamanız düşük bir ihtimaldir. Hemen soracaksanız; Dünyada Visual Basic veya programcılıkla ilgili olarak söylenmedik bir şey var mıdır? Programcılık teknikleri bağlamında bu soru ele alındığında verilecek cevap şudur:Hayır yoktur. Buradaki amacımız programcılıkla ilgili yeni bir teknik bulmak ve programcıların istifadesine bu tekniği sunmak değildir. Bu makaledeki amacımız; .NET uyumlu Visual Basic uygulamalarının anlaşılmasına katkı vermektir. Başka bir deyişle, anlatma tekniğidir bu makalede yeni olan, başka kaynaklarda bulunma ihtimalinin düşük olduğu bir anlatım ve konuyu ele alış yaklaşımıdır.
Öncelikle meraklısı için C# projeleri için buraya birkaç cümle yazacağız. Visual Studio ile hazırlanan masaüstü C# uygulamalarında “Program.cs” adında bir dosya bulunmaktadır ve C# uygulamaları çalışmaya Program.cs dosyasından başlamaktadır. Çünkü Main() metodu bu dosyada bulunmaktadır. Delphi’yi geliştiren ekip Borland’dan ayrılıp Microsoft’a geçip C#’ı geliştiren ekibe katılınca C# projeleri için Delphi’nin proje dosyası ile benzer işleve sahip “Program.cs” dosyası hazırlandı. Visual Studio 2003 ile hazırlanan C# projelerinde Program.cs dosyası yoktur.
Her ne kadar aynı sınıfları kullansalar bile Visual Basic projelerinin organizasyonu C#’tan oldukça farklıdır ve Visual Studio ile hazırlanan Visual Basic projeleri daha karmaşıktır. Konunun kolay kavranmasını sağlamak için, başka bir deyişle .NET uyumlu Visual Basic projelerinin nasıl organize edildiğini anlatmadan önce C# projelerinin yapısını taklit edip bir konsol uygulaması hazırlayacağız. Visual Studio ile hazırlanan Visual Basic projeleri hakkında bilgiyi aşağıda linkini verdiğimiz makalede bulalirsiniz.
http://www.memikyanik.net/application-sinifi-ve-visual-basic-projeleri-makalesi/30.aspx
Visual Studio ile konsol uygulaması hazırladığınızda ilgilendiğiniz namespace’leri içeren referans veya DLL dosyalarını Solution Explorer penceresinde kolayca listeleyebiliyorsunuz. Ancak Visual Studio’dan yararlanmadan hazırladığınız konsol uygulamasında System ve Microsoft.VisualBasic dışında herhangi bir namespace’in kaynaklarından yararlandığınızda derleme yaparken bu namespace’in yer aldığı referans veya DLL dosyasından derleyiciyi haberdar etmeniz gerekiyor. Bu konuda bilgi vermek için aşağıdaki gibi basit bir konsol uygulaması hazırladık. 
Sizin için herhangi bir yenilik içermeyen bu kodu dikkatlice incelerseniz bu kodda System adlı namespace’te dolayısıyla “System.dll” dosyasında yer alan Console sınıfından yararlanıldığını görürsünüz. DOS penceresinde derleme işlemini aşağıdaki gibi yapmamıza rağmen, başka bir deyişle derleyiciyi System.dll’den haberdar etmemiş olmamıza rağmen derleme başarılı bir şekilde gerçekleşti.

Çünkü Visual Basic derleyicisi System.dll ve Microsoft.VisualBasic.dll dosyalarını otomatik olarak refere etmektedir. Bu nedenle konsolda çalıştırılmak üzere hazırlanan bu Visual Basic programı aşağıdaki gibi derlense bile değişen bir şey olmaz.

Şimdi yukarıda verilen basit konsol uygulamasında değişiklik yapıp System.Windows.Forms’deki Form ve Application sınıflarından yararlanacağız.
Option Strict On
Option Explicit On
Imports System.Windows.Forms
Namespace Deneme
Public Class Form1
Inherits System.Windows.Forms.Form
Sub New()
Me.Text = "Form1"
End Sub
End Class
Public Class anasinif
Shared Sub Main()
Dim nesne as new Form1()
Application.Run(nesne)
End Sub
End Class
End Namespace
2 sınıfın olduğu bu konsol uygulamasındaki Form1 adlı sınıf System.Windows.Forms’deki Form sınıfının mirasçısı olup yapıcı metodunda Text özelliği ayarlanmaktadır. Main() metodunun olduğu Class’ta(anasinif adlı sınıf) ise ilk sınıftan yola çıkılıp nesne hazırlanıp bu form nesnesi Application sınıfının Run() metoduna parametre olarak verilmektedir. Bu sayede uygulamanın Windows’la olan bağlantısı kurulmaktadır.
Bu kodu derleyip çalıştırdığınızda “Form1” başlıklı bir pencerenin ekrana geleceğini tahmin edebilirsiniz. Bu uygulamada “System.Windows.Forms.dll” adlı reference’ten yararlanıldığı için derleme yapılırken bu DLL dosyasının aşağıdaki gibi reference parametresi ile işaret edilmesi gerekir. Bu derleme satırında reference parametresini 2. kez kullanıp System.dll’den veya başka bir referanstan derleyici haberdar edilebilinir.

Not Defteri veya başka bir şekilde hazırladığınız uygulamayı DOS penceresinde kendiniz derlerken uygulamanın konsol uygulaması olduğu varsayılır. Bu nedenle yukarıdaki şekilde derlenen projenin EXE dosyası çalıştırıldığında önce bir DOS penceresi açılır sonra proje dahilinde hazırlanan form ekrana gelir. Aşağıda verilen ekran görüntüsünü yukarıda anlattığımız şekilde hazırladığımız EXE dosyayı çalıştırdıktan sonra aldık.

Her ne kadar bu uygulamanın konsolla bir işi olmasa bile bu uygulama yukarıdaki sayfalarda anlatılan şekilde derlenirse Target parametresinin “exe” olduğuna karar verilir ve Windows formu ile birlikte DOS penceresi de açılır. DOS penceresinde derlediğiniz uygulama Windows Forms uygulaması ise derlemeyi aşağıdaki gibi yapabilirsiniz. Target parametresi winexe’den başka library ve module olabilmektedir.

Bu şekilde Visual Studio’dan yararlanmadan Not Defteri ile Windows Forms uygulamasının nasıl hazırlandığını gördükten sonra şimdi Visual Studio’yu kullanmadan Visual Studio ile hazırlanan C# uygulamalarının benzeri bir Visual Basic uygulaması hazırlayacağız. Bu amaçla “C:” sürücüsünün kök klasöründe “\Projem” adında yeni bir klasör hazırlayıp Not Defteri ile aşağıdaki gibi bir “Program.vb” dosyası hazırlayıp kaydettik. Bu dosyaya “Program.vb” yerine başka bir ad verebilirdik. Madem C# projelerini taklit ediyoruz en ideali bu dosyaya Program.vb adını vermektir. Bu dosyanın önemi Main() metodunu içermesidir.

.NET uyumlu Visual Basic uygulamalarının başlangıç noktasının Main() metodu olması gibi bir şart olmasa bile tıpkı C# uygulamalarında olduğu gibi Main() adında bir metot hazırladık. Bu şekilde Visual Studio’nun hazırladığından biraz kısıtlı bir “Program.vb” dosyasını ilgili klasöre kaydettikten sonra yine Not Defteri aşağıdaki gibi bir “Form1.vb” dosyası hazırladık. Bu kod dosyasında Form1 adlı sınıfın yapıcı metodunda initializeComponent() metodu işletilmektedir.

Visual Studio tarafından Imports deyimi ile koda dahil edilen bazı namepace’lere bu kodda gerek duymayacağımız için işaret etmedik. Aslında Imports deyimi ile işaret edilen namespace’lerin koda dahil edildiğini söylemek doğru değildir. Çünkü koda dahil edilen bir şey yoktur ve söz konusu DLL dosyası yerinde durmaktadır. Şimdi sırada “Form1” adlı Partial Class’ın diğer kısmını yazmaya geldi. Bu amaçla Not Defteri ile aşağıdaki gibi bir “Form1.Designer.vb” dosyası hazırladık.

Bu şartlarda hazırladığımız Visual Basic uygulamasının kodları 3 ayrı VB uzantılı kod dosyasında bulunmakta ve System.Windows.Forms’dan yararlanılmaktadır. Bu namespace System.Windows.Forms.dll referansında yer aldığı için derleme satırını aşağıdaki gibi düzenledik. Tahmin edeceğiniz gibi üzerinde çalışılan konsol uygulamasında birden fazla referanstan yararlanıldığı zaman derleme satırı daha uzun olacaktır. System.dll dosyası derleme sırasında uygulamaya otomatik olarak dahil edildiği için derleme satırına yazmaya gerek duymadık.
C:\Projem>VBC /Target:Winexe Program.vb Form1.vb Form1.Designer.vb /reference: System.Windows.Forms.dll /out:Projem.exe
Bu şekilde yapılan derleme sonucu “Projem.exe” adında bir EXE dosya hazırlanır. Her ne kadar bu program dosyası çalıştırıldığında “Form1” başlıklı bir pencere ekrana gelse bile bu uygulama konsol uygulaması sayılmaktadır. Uygulamanın Windows Form uygulaması olarak değerlendirilmesini sağlamak için /target:winexe parametresi ile derlemek gerekmektedir.
Şimdi Not Defteri ile hazırladığımız bu proje dahilinde ekrana getirilen forma bir düğme veya Button nesnesi yerleştireceğiz. Bu amaçla “Form1” sınıfının “Form1.Designer.vb” dosyasındaki InitializeComponent() metodunu aşağıdaki gibi düzenledik.
Option Strict On
Option Explicit On
Imports System.Windows.Forms
Namespace Projem
Public Partial Class Form1
Inherits System.Windows.Forms.Form
Dim Button1 As System.Windows.Forms.Button
Sub initializeComponent()
Me.Text ="Form1"
Me.Button1 = new System.Windows.Forms.Button()
Me.Button1.Name ="Button1"
Me.Button1.Location = new System.Drawing.Point(75, 50)
Me.Button1.Size = New System.Drawing.Size(75, 25)
Me.Button1.Text ="Button1"
Me.Controls.Add(Me.Button1)
End Sub
End Class
End Namespace
Bu şekilde 3 dosya şeklinde düzenlenen konsol uygulaması derlenip çalıştırıldığında aşağıdaki gibi bir sonuç alınır. Formdaki bu düğme tıklandığı zaman işletilmek üzere kod yazmak mümkün olmakla birlikte Visual Studio dururken Not Defteri ile proje geliştirmek pek mantıklı olmayacağı için konuyu fazla uzatmadık.
