Bir arkadaşım için IDE ve derleme aracı olmadan WinForm uygulaması derlenebileceğini göstermek için yazmıştım. Aşağıdaki kodlar ver komut satırı ilk mesajda bahsedilen isteği karşılar sanırım....
`imports system.windows.forms
imports system.drawing
imports system.threading.tasks
imports system.reflection
imports system.runtime.interopservices
imports system.resources
'****************************************************************************************
'Dosya öznitelikleri ayarları"
<Assembly: AssemblyTitle("Assembly title")>
<Assembly: AssemblyDescription("Assembly description")>
<Assembly: AssemblyCompany("Assembly company")>
<Assembly: AssemblyProduct("Assembly product")>
<Assembly: AssemblyCopyright("Assembly Copyright")>
<Assembly: AssemblyTrademark("Assembly Trademark")>
'COM tarafında görülebilir olması isteniyorsa proje düzeyinde ayarlama.
'False olduğunda sınıf ve metot özelliklerinde True olarak ayrıca belirtilmeli(COM tarafında görülebilmesi isteniyorsa)
<Assembly: ComVisible(False)>
'Eğer proje COM olarak çıkarılacaksa aşağıdaki gibi bir GUID kullanılması zorunludur.(Register)
<Assembly: Guid("d81d950a-6113-4e9a-aa31-b7d64c98105c")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: NeutralResourcesLanguage("tr-TR")>
'**********************************************************************************************
public class form1: inherits system.windows.forms.form
'Her uygulamama 'main' metodu ile başlar. Bu metot, modul' de olabileceği gibi,
'form içinde de (form bir class'dır) olabilir. Class içinde kullanıldığında,
'moduldeki gibi doğrudan çağrılamaz; bunun için 'New' sözcüğü gerekeceğinden derleyemeyiz.
'Doğrudan, yani 'New' olmadan çağrılabilmesi için 'Shared' sihirli sözcüğü kullanılır.
public shared sub main
application.enablevisualstyles
dim frm as new form1
application.run(frm)
end sub
public sub new
myform_init
end sub
private sub myform_init
'Kodlar farklı bir thread altında çalışsın istedim.
task.run(
sub()
me.windowstate = formwindowstate.maximized 'değeri 2
dim btn as new button
with btn
.name = "mybutton"
.text = "tıkla bana :)"
.size = new size(100, 50)
.location = new point(100, 100)
'btn nesnesine tıklandığında çalışacak yordamı
'lambda (benim tercihim) metot olarak belirliyoruz.
'Olay yakalama yöntemi : 1
addhandler .click,
sub(s, e)
msgbox(string.format("merhaba.{0}bu mesaj '{1}' tarafından gönderildi.", vbnewline, s.name))
dim frm as new about with {.width = 600, .text = "::.. Hakkında ..::"}
frm.showdialog(me)
end sub
end with
me.controls.add(btn)
'Form Load olayı
'Olay yakalama yöntemi : 2
addhandler mybase.load, sub(s, e) msgbox("formun 'load' olayı tetiklendi.", vbinformation, "Zeki GÜRSOY")
'Form Shown olayı
'Olay yakalama yöntemi : 3
addhandler mybase.shown, addressof form_shown_proc
end sub
).wait
end sub
private sub form_shown_proc(s, e)
msgbox("formun 'shown' olayı tetiklendi.")
end sub
'Form Closing olayı
'Olay yakalama yöntemi : 4
private sub form_closing_event(s, e) handles mybase.closing
msgbox("formun 'closing' olayı tetiklendi.")
end sub
end class
'Diğer form
public class about: inherits system.windows.forms.form
public sub new
dim mylabel as new label with {
.name = "mylabel1", .text = "Zeki GÜRSOY © 19.08.2019", .autosize = true,
.font = new font("calibri", 20, fontstyle.bold), .forecolor = color.blue
}
me.controls.add(mylabel)
end sub
end class
Derleme komut satırı... (dosyanın masaüstünde olduğu varsayıldı)
chdir %windir%\microsoft.net\Framework\v4.0.30319
vbc.exe "%userprofile%\Desktop\WinApp.txt" /out:"%userprofile%\Desktop\MyApp.exe" ^
/main:form1 /target:winexe /optimize+ /nologo /langversion:11`