Mono ile ilgili bir yazıda daha
tekrar beraberiz : Bu yazıda MonoDevelop’ ta program yazma, form tasarlama ve
System.IO kullanarak ufak bir uygulamayı Mono’ da gerçekleştireceğiz.
Önceliklle nedir bu MonoDevelop dediğinizi duyar
gibi oluyorum. MonoDevelop uygulama geliştirmek için kullanılan bir arayüzdür.
Aynen Visual Studio.Net gibi. Fakat Visual Studio’ ya göre bir hayli geride
diyebileceğimiz bir arayüz. MonoDevelop bilgisayarınızda yüklü mü diye kontrol
etmekte yarar var. Eğer Monoall.zip’ i kurduysanız default olarak programming
>More Programming Tools>MonoDevelop yolunu izlerseniz burada MonoDevelop’
u bulabilirsiniz. Eğer ki opsiyonel bir yükleme yapıpta MonoDevelop’ u yüklemediyseniz
www.MonoDevelop.com adresinden ücretsiz
olarak kaynak kodu alıp kurulumu gerçekleştirebilirsiniz. MonoDevelop’ un sitesinde
nasıl kurulacağı ayrıntılı olarak anlatılmaktadır.
programming >More Programming
Tools>MonoDevelop yolundan
ulaştığımız MonoDevelop’ a tıkladığımızda heyecanla bekliyoruz karşımıza ne
gelicek diye ve aşadaki görüntüler dökülüyor önümüze.
MonoDevelop ilk açıldığı anda karşımıza boş bir
yapı gelicektir.Program yazmamız için kendimize bir solution açmamız gerekiyor.
Bunun için File>New Solution’ dan yeni bir solution yaratıyoruz.
(Büyük resmi
görmek için tıklayınız)
Şimdi new solution’ da bizimle ilgili olan C# penceresini
inceleyelim. Bu iletişim kutusunun hepimizin Vs.Net’ ten bildiği New Project
seçimlerinden bir farkı yok. Console Project aynı Windows’ ta olduğu gibi Console
uygulamaları yazmamızı sağlıyor. Empty project ise adındanda anlaşılacağı gibi
boş bir proje oluşturmaya yarıyor. Empty project’ i açtığımız zaman karşımıza
bir pencere daha geliyor. C# source file yaptığımız zaman hiç bir .dll referans
göstermeden boş bir proje açılır. Geriye kalan Glade, Gnome#, Gtk# ise Linux’
un X Windows’ u için program geliştirmemize yarıyor. İlk olarak GTK# ile Linux
için C# dili ile program geliştireceğiz. C# ile Linux’ta program yazmak
sanki rüya gibi değil mi? Ama oluyor, yani rüya gerçek oldu:) Glade ve Gnome’
yi diğer yazılarda inceleyeceğiz. Gtk+’ ın kardeşi olan GTK# ile işe başlıyoruz.
Gtk#’ı seçtikten sonra karşımıza aşadaki gibi bir ekran gelicek.
Varsayılan olarak açılan kodları F5’ e basarak
derlersek karşımıza bir form gelir. Daha doğrusu Windows’ taki ismi Form. Fakat
Gtk’ da Form class’ ı yok bunun yerine Window class’ ı bu işi yapmaktadır. Varsayılan(Default)
kodu incelediğimiz zaman Mywindow diye bir nesneyi işaret ediyor ama ortalıkta
MyWindow diye birşey yok gibi gözüküyor. MyWindow.cs’yi açmamız gerekiyor. Bunun
için yukarıdaki menuden View>Files’ı seçelim. Karşımıza gelen ekrandan
projemizi açtığımız dosyanın içine girip MyWindow.cs dosyasını açalım. İşte
bizden gizlenmiş olan MyWindow’ u bulduk ve açtık. Hemen MyWindow’ un kodlarını
incelersek;
//MyWindow.cs
using System;
using Gtk;
public class MyWindow:Window
{
public MyWindow():base(“MyWindow”)
{
this.SetDefaultSize(400,300);
this.DeleteEvent+=new
DeleteEventHandler(OnMyWindowDelete);
this.ShowAll();
}
void OnMyWindowDelete(object
o,DeleteEventArgs args)
{
Application.Quit();
}
}
|
Gördüğünüz gibi MyWindow, Window
class’ ından türetilmiş bir window. Yapıcı metotunda
this.SetDefaultSize(400,300);
satırını
görüyoruz. this dediği MyWindow’dur. SetDefaultSize(int genişlik,int yükseklik)
olarak değer alır. Aynı şekilde
kod satırıda bu formu
göstermektedir. event’ imiz ise default olarak gelmiştir. MyWindow silindiği
zaman uygulama kapanacaktır. Evet herşey kurallara uygun. Main fonksiyonundan
MyWindow çağrıldı. MyWindow’ da default olarak boyut belirlendi ve MyWindow
gösterildi.
MonoDevelop’ ta sürükle bırak bir ortam olmadığı için uygulamamızın hemen
hemen herşeyini kodla yapıyoruz. Fakat Studio gibi bir sürükle-bırak işlemini
gerçekleştiren uygulamada geliştirilmektedir. Bu uygulama çıktığı zaman bu
konuya da değineceğiz. Fakat şimdilik Mono’ da visual olarak yapacağımız işleri
kodla yapmak zorundayız. Ufak bir uygulama geliştirelim ve bunu size
.NET’ ce anlatayım. Ama bu söylediğim isimlerin hiçbiri Gtk’ da yok çünkü
bunlar System.Windows.Form üyeleri. Yapacağımız uygulama ile bir textbox’ tan dosyanın yolunu alıp bu dosyayı
okuduktan sonra başka bir textbox’ a yazdıracak. E tabi okumayı
başlatabilmek için birde button’ a ihtiyacımız olduğu aşikar.
Gtk#’ da textbox’ ın yerini Entry class’ ı almış
durumda. Bir Entry textbox’ ın özelliklerini taşımakta ve çoğu özelliği TextBox
ile aynı denebilir. Button ise ismini korumakta yani Gtk’ da da Button sınıfını
kullanıyoruz. Aynı şekilde Label’ de de bir değişiklik yok fakat bazı özellikleri
değişiklik gösteriyor. Kullandığımız Entry, Button ve Label’ leri düzenli bir
şekilde tutmak için Table class’ ı tasarlanmıştır. Ayrıca Button, Label, Table
gibi yapılara Gtk’ da Widget denmektedir.
Table:
Table table=new Table(4,1,false);// bunun
anlamı 4 satırlı 1 sutunlu bir tablo yarat demektir.
table.Attach(Widget widget,uint sola_mesafe,uint sağa_mesafe,uint
üstten_mesafe,uint ortadan_mesafe);//ile yarattığımız widgetleri table’a
ekliyoruz. |
örneğin;
Button=new Button("OKEY");
Table table=new Table(4,1,false);
table.Attach(bt,0,2,12,13);// gibi |
Not:Table’ da sol tarafın değeri sağ tarafın değerinde, üstün değeri, ortanın
değerinden büyük olamaz. Aşağıdaki şekilde ise formumuzun yani window’ umuzun kodları yazdıktan sonraki
halini görüyoruz..
Şimdi bu programın kodlarını incelersek;
//Main.csusing System;
using Gtk;
class MainClass
{
public
static void Main(string[] args)
{
Application.Init (); //Application classının init metodu çağrıldı
new MyWindow ();//daha sonra MyWindow çağırıldı
Application.Run ();//ve Uygulama başlatıldı.
}
}
|
//MyWindow.cs
using System;
using Gtk;
using System.IO;
public class MyWindow : Window {
Entry textbox1;
Entry textbox2;
public MyWindow () : base ("MyWindow")
{
this.SetDefaultSize (500, 200);
Table table=new Table(4,1,false);
Label lb1=new Label("Okunacak dosyanın yolunu giriniz");
Label lb2=new Label("Okunan veriler");
Button bt=new Button("OKU");
bt.Clicked+=new EventHandler(okuma);//buttonunun clicked eveti .NET’le
aynı........
textbox1=new Entry("");//işte bir Entry,ve geçişte kolaylık
olması için textbox1 ismini verdim
textbox2=new Entry("");
textbox2.Editable=false;//textbox2’nin edit özelliğini kapatarak read-only
konuma getirdik
table.Attach(bt,0,2,12,13);//yaptığımız her Widgeti table ekledik.....
table.Attach(lb1,0,1,2,3);
table.Attach(textbox1,1,2,2,3);
table.Attach(lb2,0,2,10,11);
table.Attach(textbox2,0,3,11,12);
this.Add(table); //tabiki tabloyuda MyWindow’a eklemeliyiz
this.ShowAll ();//MyWindowu gösteriyoruz.....
}
Window uyariwin;//bu windowu çeşitli uyarılar için kullanıyoruz.
void okuma(object o,EventArgs args)
{
uyariwin=new Window("Uyari!");
uyariwin.SetDefaultSize(300,100);
Button okey=new Button("OKEY");
okey.Clicked+=new EventHandler(don);
Label uyarilabel=new Label("");
Table tb=new Table(2,1,false);
tb.Attach(uyarilabel,0,1,0,2);
tb.Attach(okey,0,2,2,3);
uyariwin.Add(tb);
try
{
if(textbox1.Text=="")
{
textbox2.Text="";
uyarilabel.Text="Lütfen okunacak dosyanın yolunu giriniz.(ör:/root/deneme.txt)";
uyariwin.ShowAll();
}
else
{
string okunan="";
StreamReader okuyucu=new StreamReader(textbox1.Text);
while((okunan=okuyucu.ReadLine())!=null) // gördüğünüz gibi okuma işleminde
bir farklılık yok...
{
textbox2.Text+=okunan;
}
okuyucu.Close();
uyariwin.Title="Okuma başarılı";
uyarilabel.Text="Okuma işlemi tamamlandı.....";
uyariwin.ShowAll();
}
}
catch
{
uyarilabel.Text="Dosya bulunamıyor...";
uyariwin.Title="Error";
uyariwin.ShowAll();
}
}
void don(object
o,EventArgs args)
{
uyariwin.Destroy();// bu ise açık olan uyariwin pencerisini
kapatır. Dispose’ la aynı değildir.nesne Ramde’dir.
}
}
|
Programımızı derledikten(compile) ve bir dosyayı okuttuktan sonraki sonuç ise
aşağıdakine benzer olacaktır.
program
kodlarını indirmek için tıklayın.
Bu programda Gtk ve yapısını kavramaya çalıştık.
Widget’ ların özelliklerine fazla takılmayınız. Yeri geldikçe açıklamalarda bulunacağım.
Bu uygulamamız Linux’ ta çalışmaktatır. Fakat bu Windows üzerinde çalışmadığı
anlamına gelmez yani cross paltform dediğimi teoriye tam destek var. Bu işlemin
nasıl gerçekleştirileceğine diğer makalelerde değinmeye çalışacağım. Herkese kolay
gelsin.
Mono dolu günler...
Makale:
MonoDevelop ve Mono'da Form işlemleri Mono - Linux'ta .NET Caner Şahan
|