C Sharp Programlama Dili/Linux'ta C Sharp kullanımı

Ders 40. Linux'ta C Sharp kullanımı


Linux'ta iki şekilde C# uygulamaları geliştirebilirsiniz:

  1. Kodlarınızı metin editöründe yazarsınız. mono-runtime paketini kurarsınız. Kaynak kod dosyanızı mono-runtime paketiyle gelen mcs programıyla derlersiniz. Derlenmiş programı mono-runtime paketiyle gelen mono programıyla çalıştırırsınız. mcs programı Windows'taki csc.exe'ye benzer. mono-runtime paketi Windows'taki .NET Framework'a benzer. mono-runtime paketi hem mcs ile program derlemeniz için ve hem de mcs ile derlenmiş programları çalıştırmanız için gereklidir. Mono'nun Windows ve MacOS sürümleri de vardır. Bu sayede Linux'ta yazmış olduğunuz bir C# programının Windows ve MacOS'ta çalışması sağlanır. Eğer C# programınızı yazarken Mono'ya özgü kütüphaneleri kullanmamışsanız yazdığınız programın Windows'ta çalışabilmesi için ilgili Windows makinede sadece .NET Framework'un kurulu olması yeterli olacaktır.
  2. mono-develop paketini kurarsınız. Kodlarınızı MonoDevelop yazılımında yazar ve derlersiniz. MonoDevelop çok gelişmiş özellikler sunar. MonoDevelop Windows'taki Visual Studio'ya benzer.

Şimdi bu iki yöntemi sırayla görelim.

Komut satırında derleme

değiştir

mono-runtime paketinin kurulumu

değiştir

Paket yöneticisinde mono-runtime paketini aratın ve -varsa- bağımlılıklarıyla birlikte kurun.

C# kodlarını yazma

değiştir

Bir metin düzenleyicide aşağıdaki dosyayı oluşturun ve ismini deneme.cs verin.

using System;
class deneme
{
   static void Main()
   {
      Console.WriteLine("Deneme");
   }
}

Kaynak kod dosyanızı derleme

değiştir

Komut satırında bu dosyayı kaydettiğiniz dizine geçin ve aşağıdaki komutu verin.

mcs deneme.cs

Bu komut sonucunda aktif klasörde deneme.exe isimli bir dosya oluşacaktır.

Derlenmiş programı çalıştırma

değiştir

deneme.exe dosyasının olduğu klasöre komut isteminde geçip şu komutu verin:

mono deneme.exe

Program ekrana Deneme çıktısını verecektir. Bu exe dosyasını Windows bir sisteme taşımanız durumunda çift tıklar tıklamaz çalışacaktır (tabii ki sistemde .NET Framework kurulu ise). Çünkü programda Mono'ya özgü herhangi bir kütüphane kullanmadık. Programda sadece Console sınıfını kullandık -ki bu sınıf da .NET Framework kütüphanesinde de var. Eğer programımızda Mono'ya özgü bir kütüphane kullansaydık bu programın Windows bir sistemde çalışması için ilgili sistemde Mono'nun kurulu olması gerekecekti.

MonoDevelop

değiştir

MonoDevelop Windows'taki Visual Studio'ya benzer. Bir tümleşik geliştirme ortamıdır (IDE).

Paket yöneticisinde mono-develop paketini aratın ve -varsa- bağımlılıklarıyla birlikte kurun.

Temel kavramlar

değiştir

Proje: Bir proje derlendiğinde tek bir assembly (çalıştırılabilir dosya veya kütüphane) oluşur. Bir proje bir veya birden fazla kaynak kod dosyasından, kütüphane referanslarından ve kaynak dosyalardan (örneğin resim dosyaları) oluşabilir. Bir projenin bütün bilgileri XML biçimli ve .csproj uzantılı bir dosyada saklanır. Bu csproj dosyasında projenin hangi dosyalardan oluştuğu ve genel yapılandırmaları saklanır ve Visual Studio ile uyumludur. Projeler kaydedilip yeniden çağrılabilir, bu sayede projeye daha sonra kaldığımız yerden devam edebiliriz.

Çözüm: Bir veya birden fazla projeden oluşur. Çözüm bilgileri XML biçimli ve .sln uzantılı bir dosyada saklanır. Çözümler kaydedilip yeniden çağrılabilir. Bir çözüm alt çözümler içerebilir. Mono ile oluşturduğunuz çözüm dosyaları Visual Studio ile uyumludur.

Varsayılan durumda projeleriniz şu hiyerarşide saklanır: Ev klasörünüz > Projects > Çözüm ismi > Proje ismi

Yeni çözüm başlatma

değiştir

MonoDevelop'u açın. Dosya > Yeni > Çözüm yolunu izleyin. Açılan pencerede çözüme koyulacak ilk projenin dilini, tipini (konsol projesi, kütüphane, vs.) seçin. Projenize ve çözümünüze isim verin. Burada ayrıca çözümün kaydedileceği klasörü değiştirebilirsiniz. Ancak tutarlılık açısından değiştirmenizi tavsiye etmiyorum. "Create directory for solution" onay kutusunu işaretlemezseniz çözüm aktif çözüme bir alt çözüm olarak oluşturulur. Tamamen yeni bir çözüm oluşturduğumuz için bu onay kutusunun işaretli olması gerekiyor. Dili C# seçin ve bu seferlik örnek için proje tipini konsol projesi seçin. Çözümün ismini "Cozum" ve projenin ismini "Program" yapın. "İleri"yi tıklayın. Gelen ekranda hiçbir şeyi seçmeyip "Tamam"ı tıklayın. Ekranınıza main.cs dosyasının içeriği gelecektir. Bu dosyanın içeriği şöyle olacaktır:

using System;
namespace Program
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Console.WriteLine ("Hello World!");
		}
	}
}

Çalıştır > Çalıştır yolunu izleyerek programı MonoDevelop'un dahili konsol ekranında çalıştırabilirsiniz.

Var olan bir çözüme proje ekleme

değiştir

Kod yazdığınız alanın solunda bir çözüm kutusu olacaktır. Bu kutuda aktif çözümünüz, çözümün içindeki projeler, projelerin içindeki dosyalar hiyerarşik olarak gösterilecektir. Bir çözüme yeni proje eklemek için ilgili çözümü sağ tıklayın Add > Add New Project... yolunu izleyin. Açılan pencerede projenin dilini ve tipini seçin ve ismini girin. Dili C# ve tipi kütüphane seçelim. Yeni projenize Kutuphane ismini verin ve "İleri" düğmesine tıklayın. Açılan "Proje Özellikleri" penceresinde hiçbir şeyi seçmeden "Tamam" düğmesine tıklayın. Şimdi çözümümüzde iki proje var: bir konsol projesi ve bir kütüphane. Kutuphane projemizdeki asıl dosya MyClass.cs'dir ve kütüphanemizdeki kodları içerir. Bu dosyayı çözüm kutusundan açın. İçeriğinin şöyle olması gerekiyor:

using System;
namespace Kutuphane
{
	public class MyClass
	{
		public MyClass ()
		{
		}
	}
}

Bir çözüm birden fazla çalıştırılabilir dosya içerebilir. Çalıştır > Çalıştır yolunu izlediğimizde başlangıç projesi çalıştırılır. Başlangıç projesini, çözüm kutusundaki ilgili projeyi sağ tıklayıp "Set As Startup Project"i seçerek belirtebilirsiniz. Bu şekilde tek bir projeyi başlangıç projesi olarak belirtebiliriz. Birden fazla projeyi başlangıç projesi olarak belirtmek için ilgili çözüme sağ tıklayın ve "Seçenekler"i tıklayın. Açılan pencereden Çalıştır > Startup Project yolunu izleyin. Pencerenin sağ kısmında bir veya birden fazla başlangıç projesi belirtebilirsiniz. Ana pencerede Çalıştır > Çalıştır yolunu izlediğimizde projeler burada belirttiğimiz sırada derlenip çalıştırılacaktır.

NOT: Gördüğünüz gibi her bir projenin asıl dosyası varsayılan durumda projenin ismiyle aynı olan bir isim alanı içeriyor ve sınıflar bu isim alanının içine yazılıyor.

Çözümdeki kütüphane projemizi çalıştırılabilir dosyamızla ilişkilendirme

değiştir

Kütüphane, çalıştırılabilir dosyamızla aynı çözümde olsa bile kütüphanedeki sınıfları çalıştırılabilir dosyamızda kullanmak için kütüphaneyi çalıştırılabilir dosyamızla ilişkilendirmeliyiz. Bunun için çözüm kutusundaki ilgili projeyi (konsol projemizi) yanındaki oku kullanarak genişletin. Ortaya çıkan "Kaynaklar" ögesini sağ tıklayın ve "Edit References..."ı tıklayın. Açılan pencerede "Projeler" sekmesine gelin. Oluşturduğumuz kütüphanenin burada gözükmesi gerekiyor. Kütüphaneyi seçip "Tamam" düğmesine tıklayın. Şimdi kütüphanemizi çalıştırılabilir dosyamızla ilişkilendirdik. Ancak yine de emin olmak için çalıştırılabilir dosyamızın kaynak kodunun (Main.cs) using bildirimlerine using Kutuphane; satırını ekleyin ve Main() metodunun içini aşağıdaki satırlarla değiştirin:

MyClass mc=new MyClass();
Console.WriteLine(mc);

Şimdi "İnşa Et" menüsünden "Build Cozum"u tıklayın. Bu sayede Cozum çözümündeki bütün projeleri derledik. Şimdi Çalıştır menüsünden Çalıştır'ı tıklayın. Başlangıç projemiz çalıştırılacaktır ve ekrana Kutuphane.MyClass yazılacaktır.

NOT: Eğer istersek bir çözümü komut isteminden de inşa (build) edebiliriz. Bunun için sln dosyasının olduğu klasöre komut isteminde geçin ve şu komutu verin:

mdtool build --f --buildfile:Cozum.sln

Bu yöntemi bazı küçük işler için MonoDevelop ile uğraşmak istemediğimizde kullanabiliriz. Bir projenin çalıştırılabilir dosyası ilgili proje klasörünün bin klasöründeki Debug klasöründe proje ismiyle ve exe veya dll uzantısıyla oluşacaktır. İstediğimiz exe dosyasını mono komutuyla çalıştırabiliriz.

MonoDevelop ile görsel arayüzü olan programlar geliştirme

değiştir

MonoDevelop, Visual Studio'nun desteklediği sürükle-bırak ile görsel arayüz oluşturmayı destekler. Şimdi MonoDevelop ile görsel arayüzü olan bir program oluşturacağız. Programda iki TextBox, bir buton ve bir label olacak. Butona basıldığında TextBox'lara girilen sayıların toplamı label'a yazılacak. Programın basit olduğunu düşünebilirsiniz. Ancak zaten bizim burada amacımız sadece Mono'da görsel arayüzü olan programların nasıl geliştirileceğini anlatmak. O yüzden programı sade tutuyoruz. Şimdi başlayalım.

  • MonoDevelop'u açın. Dosya > Yeni > Çözüm yolunu izleyerek yeni bir çözüm oluşturun. Çözümün ve projenin her ikisinin de ismi Gorsel olsun. Zaten çözümümüzde sadece bir proje olacak. Dili C# ve proje tipini "Gtk# 2.0 Projesi" seçin (sizde sürüm farklı olabilir). "ileri" düğmesine tıklayın. "Proje özellikleri" penceresinde hiçbir şeyi seçmeyerek "Tamam" düğmesine basın.
  • Çözüm kutusundaki projenin altındaki "Kaynaklar" düğümünü genişletin. Buradaki kütüphanelerden bazıları kırmızı renkte ise MonoDevelop bu kütüphaneleri düzgün ilişkilendirememiş demektir. Bu durumda paket yöneticisinden gtk-sharp-devel paketini kurup MonoDevelop'u yeniden başlatın. İşi garantiye almak istiyorsanız yeni çözüm oluşturabilirsiniz.
  • Şimdi MonoDevelop gerekli dosyaları oluşturdu. Şu an programımız içi boş olan tek bir formdan oluşmakta. Bu formu görmek için Çalıştır menüsünden Çalıştır'ı seçin. Ekrana boş bir form gelecektir. Formun sağ üst köşesindeki çarpı işaretini tıklayarak koda geri dönün.
  • Şimdi boş forma birtakım kontroller ekleyeceğiz. Önce çözüm kutusundan MainWindow.cs'ye çift tıklayarak bu dosyanın içeriğinin yeni sekme olarak kod paneline (ortadaki panel) gelmesini sağlayın. Bu dosya kod paneline geldiğinde kod panelinin en altında "Kaynak kodu" ve "Tasarımcı" olmak üzere iki sekme gelecektir. Ayrıca sağ paneldeki "Araç çubuğu" sekmesinin üzerine farenizin işaretçisini getirerek forma ekleyebileceğiniz kontrolleri görebilirsiniz. Arayüzü görsel olarak tasarlamak için kod panelinin en altındaki "Tasarımcı" sekmesine tıklayın.
  • Formun başlığı varsayılan durumda MainWindow'dur. Bunu değiştirmek için öncelikle formu seçmeliyiz. Formu seçmek için ya forma tıklayın ya formun hemen üstündeki açılır kutudan "MainWindow"u seçin ya da sağ paneldeki "Document Outline" sekmesindeki "MainWindow"a tıklayın. "Document Outline" sekmesi formumuzu ve forma getirdiğimiz bütün kontrolleri hiyerarşik olarak gösterecektir. Formumuzun ismi "MainWindow"dur. Formu aktif hâle getirdikten sonra şimdi fare işaretçiniz ile sağ paneldeki "Öznitelikler" sekmesine gelin. Buradaki "Window Properties" düğümündeki "Title" girdisinin sağında "MainWindow" değeri olacaktır. Bu değere tıklayın. "MainWindow" yazısı değiştirilebilir hâle gelecektir. "MainWindow" yazısını istediğiniz bir yazıyla değiştirin. Örneğin bu örnek için "Toplama işlemi" yapalım. Ancak şunu unutmayın ki burada yalnızca formumuzun başlık çubuğundaki yazıyı değiştirdik. Formumuzun ismi halen MainWindow.
  • Formun sol üst köşesindeki simgesini de değiştirebiliriz. Bunun için yine "Öznitelikler" panelindeki "Window Properties" düğümündeki "Icon" girdisinin sağındaki boş kutuya tıklayın. Bu kutunun hemen sağına üzerinde ... yazan bir buton gelecektir. Butona tıklayın, ekrana çeşitli simgelerin listelendiği bir pencere gelecektir. Bu pencereden istediğiniz bir simgeyi seçip "Tamam" düğmesine tıklayın. Şimdi formumuzun sol üst köşesinde gözükecek simgeyi belirledik.
  • Formumuzun genel özelliklerini belirledikten sonra şimdi forma kontrolleri getirmeye başlayalım. Genel kaide gereği her kontrol bir kapsayıcı içinde olmalıdır. Kapsayıcılar kontrollerin formda nereye koyulacağını belirlemek için kullanılır. Bir kapsayıcı içine sadece bir tane kontrol koyulabilir. Formun kendisi de aslında bir kapsayıcıdır. Ancak bir butonu direkt forma sürüklersek form sadece bir butondan ibaret olur. Forma tam dört tane kontrol getirmemiz gerekiyor. O halde kapsayıcı kullanmak zorundayız. Çeşitli kapsayıcı türleri vardır, hepsinin değişik kullanım alanları vardır. Hangi kapsayıcıyı getireceğimize forma kontrolleri nasıl yerleştireceğimizi belirledikten sonra karar veririz. Yani bu durumda öncelikle formun içindeki kontrollerin formda nasıl bir yerleşime sahip olacağını belirleyelim. Bu örnek için ben şöyle bir yerleşime karar verdim: form yatay üç hücreden oluşsun. En üst hücre kendi içinde iki alt hücreye ayrılsın. En üstteki hücrelerin her birine TextBox'lar, ortadaki hücreye buton, en alttaki hücreye ise label gelsin. Yani son tahlilde yerleşim şöyle olacak:
Üst sol hücre (1. TextBox) Üst sağ hücre (2. TextBox)
Orta hücre (buton)
Alt hücre (label)
  • Bu yerleşimi elde etmek için "Araç çubuğu" sekmesinden VBox kapsayıcısını forma sürükleyip bırakın. VBox genel amaçlı bir kapsayıcıdır ve formu yatayda üç alt kapsayıcıya ayırır. Bu kapsayıcıların her birinin içine normal kontroller getirilebilir. Eğer alt kapsayıcı sayısı istediğimizden fazla ise herhangi bir alt kapsayıcıyı sağ tıklayıp "Sil" diyerek formdaki alt kapsayıcı sayısını bir azaltabilirsiniz. Eğer kapsayıcı sayısı istediğinizden az ise herhangi bir alt kapsayıcının içine yeni bir kapsayıcı sürükleyebilirsiniz. Şimdilik kapsayıcı sayısı bizim için uygun ve herhangi bir ekstra işlem yapmıyoruz.
  • Şimdi en üst kapsayıcının içine HBox kapsayıcısını sürükleyip bırakın. VBox genel amaçlı bir kapsayıcıdır ve formu (veya içine koyulduğu kapsayıcıyı) dikeyde üç alt kapsayıcıya ayırır. En üst hücrede üç değil, iki alt hücre istiyoruz, o hâlde en üst hücreye getirdiğiniz kapsayıcılardan birini silin.
  • Şimdi kapsayıcıların içine asıl kontrolleri getireceğiz. "Araç çubuğu" sekmesinin "Bileşenler" alt düğümünden "Entry" kontrolünü üst sol kapsayıcının içine, yeni bir Entry kontrolünü üst sağ kapsayıcının içine, "Button" kontrolünü orta kapsayıcının içine, "Label" kontrolünü alt kapsayıcının içine sürükleyip bırakın. Daha sonra Entry'lerin ve Label'ın ismini kod yazarken kullanacağız. Herhangi bir kontrolün ismini görmek için kontrolü aktif hâle getirin ve "Öznitelikler" sekmesindeki "Name" girdisinin değerine bakın. Ayrıca buradan kontrolün ismini de değiştirebiliriz.
ÖNEMLİ NOT: Birçok form kontrolünün varsayılan ebatları vardır. Bu tür bir durumda kapsayıcının ebatları, içindeki kontrole göre değişir. Yani kontrol kapsayıcıya göre değil, kapsayıcı kontrole göre boyutlandırılır. Bu tür bir durumda kapsayıcının boyutlarının değişmemesini istiyorsak ilgili kapsayıcıyı aktif hâle getirip "Öznitelikler" sekmesinden "Box Properties" alt düğümünden "Homogeneous" onay kutusunu işaretli hâle getiririz. "Homogeneous" özelliği ilgili kapsayıcının içindeki bütün alt kapsayıcıların eşit ebatlarda olmasını sağlar.
  • Kontrolleri forma getirdik. Şimdi bu kontrollere kod bağlama zamanı. Bir kontrole kod bağlamak için ilgili kontrolü aktif hâle getirin, "Öznitelikler" sekmesinin "Sinyaller" alt sekmesini açın. Oradaki herhangi bir sinyalin sağındaki boş alana tıklayıp bir şey yazıp enter'a basın. Bu örneğimizde sadece butona kod bağlayacağız. O hâlde butonu aktif hâle getirin, "Özniteliker" sekmesinin "Sinyaller" alt sekmesini açın. Butonun tıklanma sinyaline kod bağlayacağımız için buradaki "Button Signals" alt düğümündeki "Clicked" girdisinin sağındaki boş alana tıklayın. Bu alan değiştirilebilir hâle gelecektir. Buraya "OnClick" yazın. Ancak "OnClick" yazmanız şart değildir, siz başka bir şey de yazabilirsiniz. Enter'a basın. Enter'a basar basmaz MainWindow.cs dosyasının içine bu yazdığınız isimli bir metot eklenecek ve imleç MainWindow.cs dosyasındaki bu metodun içine konumlanacaktır. Şu an bu metodun içi boş. Buton tıklandığında çalışacak olan kodları bu metodun içine yazacağız. Bu metodun içine şu kodları yazın:
//Kontrollerin varsayılan isimlerini değiştirmediğinizi varsayıyorum.
int a=Convert.ToInt32(entry1.Text);
int b=Convert.ToInt32(entry2.Text);
label1.Text=(a+b).ToString();

Bu kodda entry'lerin Text'lerini int'e çevirdik. Çünkü Entry sınıfının statik olmayan Text özelliğinin geri dönüş tipi string'tir. Benzer şekilde Label sınıfının statik olmayan Text özelliğinin geri dönüş tipi de string'tir. Bu yüzden son satırda toplama işlemini yaptıktan sonra sonucu ToString() metoduyla string'e çevirip atama yaptık. Gerek Entry sınıfının gerekse Label sınıfının Text özellikleri yazılır-okunur durumdadır. Yani programda herhangi bir anda bu kontrollerin üzerindeki yazıyı okuyabileceğiniz gibi bu kontrollerin üzerindeki yazıyı değiştirilebilirsiniz de.

Sonucu görmek için "Çalıştır" menüsünden "Çalıştır"ı tıklayın. Bu örnekte MonoDevelop'taki birkaç kontrolü kısaca tanıttık. Şimdi MonoDevelop'taki bütün kontrolleri sırayla ve ayrıntılı bir şekilde tanıtma zamanı.

MonoDevelop'taki bütün kontroller

değiştir
Alignment kapsayıcısı
değiştir

Çocuğunun (alignment kapsayıcısının içindeki kontrol) ebatlarını ve yaslanımını ana kapsayıcıya (alignment kapsayıcısının içinde bulunduğu kapsayıcı) göre belirtmek için kullanılır. Yani alignment kapsayıcısı daima başka bir kapsayıcının içinde bulunmalıdır. Alignment kapsayıcısının özellikleri şunlardır ("Öznitelikler" sekmesinin "Alignment Properties" düğümünden erişilir):

  • Xscale: Kontrolün genişliği belirtilir. [0,1] aralığında bir sayı olmalıdır. 0 kontrolün orijinal genişliğini belirtir. 1 ise kapsayıcının genişliğini belirtir. Yani Xscale seçeneği 1 yapılırsa kontrol, kapsayıcıya yatayda yayılmış olur.
  • Yscale: Kontrolün yüksekliğini belirtir. [0,1] aralığında bir sayı olmalıdır. 0 kontrolün orijinal yüksekliğini belirtir. 1 ise kapsayıcının yüksekliğini belirtir. Yani Yscale seçeneği 1 yapılırsa kontrol, kapsayıcıya dikeyde yayılmış olur.
  • Xalign: Kontrolün kapsayıcı içinde yatay yaslanımını belirtir. [0,1] aralığında bir sayı olmalıdır. 0 kontrolün kapsayıcı içinde sola yaslanacağını, 1 ise sağa yaslanacağını belirtir.
  • Yalign: Kontrolün kapsayıcı içinde dikey yaslanımını belirtir. [0,1] aralığında bir sayı olmalıdır. 0 kontrolün kapsayıcı içinde üste yaslanacağını, 1 ise alta yaslanacağını belirtir.

NOT: Xalign özelliği, Xscale özelliği 1 yapılmışsa etkisizdir. Benzer şekilde Yalign özelliği de Yscale özelliği 1 yapılmışsa etkisidir. Çünkü bu tür durumlarda kontrol kapsayıcıya genişleyeceği için bir yaslanımdan söz edilemez.

  • LeftPadding: Kontrolün kapsayıcıya göre sol sınırdan ne kadar içeride başlayacağını belirtir (piksel). Eğer kontrol kapsayıcı içinde sola yaslanmışsa anlamlıdır.
  • TopPadding: Kontrolün kapsayıcıya göre üst sınırdan ne kadar içeride başlayacağını belirtir (piksel). Eğer kontrol kapsayıcı içinde üste yaslanmışsa anlamlıdır.
  • RightPadding: Kontrolün kapsayıcıya göre sağ sınırdan ne kadar içeride başlayacağını belirtir (piksel). Eğer kontrol kapsayıcı içinde sağa yaslanmışsa anlamlıdır.
  • BottomPadding: Kontrolün kapsayıcıya göre alt sınırdan ne kadar içeride başlayacağını belirtir (piksel). Eğer kontrol kapsayıcı içinde alta yaslanmışsa anlamlıdır.
  • BorderWidth: Kapsayıcının çerçevesinin kalınlığını belirtir (piksel). Çerçeve saydamdır. Örneğin çerçevenin değerini 5 yaparsak yukarıdaki bütün padding değerlerini 5 ayarlamış gibi oluruz.
Expander kapsayıcısı
değiştir

Çocuklarının kullanıcı davranışına göre gizlenip gözükebilmesini sağlar. Kullanılması durumunda forma bir ok işareti ve bir label ekler. Bu ok işareti tıklandığında çocuklar gözükür hâle gelir. Ok tekrar tıklandığında çocuklar tekrar gizlenir. Özellikleri şunlardır ("Öznitelikler" sekmesinin "Expander Properties" düğümünden erişilir):

  • Expanded: İlgili Expander'ın açık mı (çocukları gözüküyor mu) kapalı mı (çocukları gizli mi) olduğunu belirtir. Yazılır-okunurdur, yani programda istediğimiz zaman bir expander'ın açılıp kapanmasını sağlayabiliriz. Geri dönüş tipi bool'dur.
  • Spacing: Çocukları arasındaki mesafeyi belirtir (piksel).
  • BorderWidth: Çerçevesinin kalınlığını belirtir (piksel).
Fixed kapsayıcısı
değiştir

Çocuğunun belirli bir ebatta ve belirli bir koordinatta olmasını sağlar. Otomatik ebatlandırma/konumlandırma yapılmaz. Ancak bunlar olumlu özellikler gibi görünmesine rağmen aslında olumsuz özellikledir. Çünkü programın arayüzünde bizim kontrolümüzde olmayan birçok şey vardır. Örneğin kontrolün üzerindeki metin bizim beklediğimizden daha büyük fontta ise bu metin tam gözükmeyecektir. Ayrıca eğer programımızın arayüzünün başka bir dile çevrilebilmesini istiyorsak bu kapsayıcıyı kullanmamalıyız. Çünkü farklı dillerdeki ibareler farklı uzunlukta olabilir, bu durumda ilgili ibare kontrolün dışına çıkmak isteyecektir, bu durumda kontrol büyütülemeyeceği için ibare kesilir. Fixed kapsayıcısının iki önemli metodu vardır:

  • void Move(Widget kontrol,int x,int y): Kapsayıcının içindeki bir kontrolü başka bir koordinata taşır.
  • void Put(Widget kontrol,int x,int y): Kapsayıcının belirli bir koordinata bir kontrol koyar.

Ayrıca bir kontrolün Fixed kapsayıcısı içindeki koordinatı ilgili kontrolün (kapsayıcı değil) "Öznitelikler" sekmesinin "Fixed Child Layout" düğümündeki X ve Y özellikleriyle, ilgili kontrolün ebatları ise yine ilgili kontrolün "Öznitelikler" sekmesinin "Common Widget Properties" düğümündeki WidthRequest ve HeightRequest özellikleriyle belirlenir. Fixed kapsayıcısı içine birden fazla kontrol koyulabilir.

Frame kapsayıcısı
değiştir

Çocuklarının etrafına bir kutu çizer. Kontrolleri form içinde gruplandırmak için kullanılır. Forma otomatik olarak bir label kontrolü ve bir Alignment kapsayıcısı getirir. Frame kapsayıcısı içine koyulan kontrol otomatik olarak Alignment kapsayıcısının içine konulur. Frame kapsayıcısının başlığının yaslanımı kapsayıcının LabelXalign ve LabelYalign özellikleriyle belirlenir. ShadowType seçeneği ile kutunun etrafını çizen çerçevenin tipi belirlenir, varsayılan durumda çerçeve saydamdır.

HBox kapsayıcısı
değiştir

Formu dikeyde üç alt kapsayıcıya böler.

HButtonBox kapsayıcısı
değiştir

Forma dikeyde sıralı butonlar getirmek için kullanılır. HButtonBox kapsayıcısının özelliklerini değiştirmek için HButtonBox sınıfının annesi olan ButtonBox sınıfının metotları kullanılır. ButtonBox sınıfının önemli metotları şunlardır:

Bu kitabın diğer sayfaları
  • Sınıflar
  • Operatör aşırı yükleme
  • İndeksleyiciler
  • Yapılar
  • Enum sabitleri
  • İsim alanları
  • System isim alanı
  • Temel I/O işlemleri
  • Temel string işlemleri
  • Kalıtım
  • Arayüzler
  • Kısmi tipler ve metotlar
  • İstisnai durum yakalama mekanizması
  • Temsilciler
  • Olaylar
  • Önişlemci komutları
  • Göstericiler
  • Assembly kavramı
  • Yansıma
  • Nitelikler
  • Örnekler
  • Şablon tipler
  • Koleksiyonlar
  • yield
  • Veri tabanı işlemleri
  • XML işlemleri
  • Form tabanlı uygulamalar
  • Visual Studio.NET
  • Çok kanallı uygulamalar
  • ASP.NET