Section
Form üzerindeki nesneleri satır ve sütunlara bölerek düzenli bir şekilde yerleştirmenizi sağlayan yerleşim (layout) nesnesidir. Kendi başına bir veri tutmaz; içine koyduğunuz diğer nesneleri hizalar.
Bu nesnenin bir değeri yoktur.
Ne zaman kullanılır?
Formdaki nesneleri yan yana ya da alt alta düzenli kolonlara dizmek istediğinizde kullanılır. Örneğin "Ad" ve "Soyad" alanlarını aynı satırda iki kolona, "Adres" alanını ise tek bir geniş kolona yerleştirebilirsiniz. Bir Section'ı kolonlara bölmek için içine Column nesneleri yerleştirilir. Başlığı açılıp kapanan gruplama için Panel, sekmeli yerleşim için Tabs daha uygundur. Section başlıksız, sade bir yerleşim ızgarası sunar.
Tasarımcı özellikleri
Section bir yerleşim nesnesidir; içine sürüklediğiniz nesneleri taşıyan bir kapsayıcıdır. Bir Section seçildiğinde Özellik Görüntüleyici'de temel yerleşim ayarları görünür.
Sınıf zinciri: Section : LayoutControl : BaseControl. Bu zincir, bir giriş alanına ait olan Value, Text, Enabled, Visible, Placeholder, TextAlign, TabIndex gibi özellikleri içermez. Section'ın güçlü tipli sınıfında yalnızca aşağıdaki üyeler vardır: Name, ControlId, Items, Layout, DesignerProps, ServerEvents, ClientEvents, ExecutedServerEvents.
General
| Özellik | Açıklama |
|---|---|
Name | Nesnenin koddaki adı (ör. Section1). Koddan bu adla erişirsiniz. |
Yerleşim (Layout)
| Özellik | Tip | Açıklama |
|---|---|---|
Layout | ContainerLayout | Section'ın yerleşim ızgarasını tanımlar. Alanları: Width (genişlik), Padding (iç boşluk), Visible (Nullable<Boolean>, kapsayıcının görünürlüğü), ClientVisible (Nullable<Boolean>, istemci tarafı görünürlük). |
DesignerProps | DesignerProps | Tasarımcıya ait ayarlar. Alanları: Layout (ContainerLayout) ve AllowAutoClear (Boolean). |
Items | List<String> | Section içine eklenen alt nesnelerin adlarının listesidir (gerçek nesneler değil, isimleri). Tasarımcıda nesneleri sürükleyip bıraktıkça bu liste otomatik dolar. |
Section bir kapsayıcı/yerleşim nesnesidir. Kullanıcının veri girdiği bir alan değildir; bu yüzden Value veya Text özelliği bulunmaz.
Daha önemlisi: güçlü tipli Section1 referansı doğrudan bir Visible veya Enabled özelliği de sunmaz (bunlar Section / LayoutControl / BaseControl sınıflarında tanımlı değildir). Görünürlüğü yönetmek için Section1.Layout.Visible (ve istemci tarafı için Section1.Layout.ClientVisible) alanlarını kullanırsınız; bunlar ContainerLayout üzerinde tanımlı Nullable<Boolean> alanlardır. Bkz. Kod örnekleri.
Olaylar
Section bir yerleşim nesnesi olduğu için kullanıcı etkileşimine dayalı değer olayları (değişme, seçilme vb.) sunmaz. Yalnızca BaseControl üzerinden gelen yaşam döngüsü kancaları geçerlidir.
Açılış sırası: OnInit → OnLoad → OnPreRender → OnRender
Bu kancalar BaseControl üzerinde tanımlıdır (OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged). Section'a özgü ek bir olay yoktur; OnTextChanged, OnValueChanged gibi giriş olayları bu nesnede bulunmaz.
| Olay | Ne zaman çalışır |
|---|---|
OnInit | Form açılırken nesne oluşturulduğunda, en başta. |
OnLoad | OnInit'in hemen ardından, nesne yüklenince. |
OnPreRender | Nesne ekrana çizilmeden hemen önce. |
OnRender | Nesne ekrana çizilirken. |
OnPropertyChanging / OnPropertyChanged | Bir özellik kodla değiştirilmeden önce / sonra. |
Kod örnekleri
Section'ın bir değeri olmadığı için kod tarafında genellikle yalnızca görünürlüğünü değiştirirsiniz. Görünürlüğü Section1.Layout üzerinden yönetirsiniz; güçlü tipli Section1 referansının doğrudan bir Visible/Enabled özelliği yoktur. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir.
Akış (Flow) kodu (C#, sunucu)
Akış kodunda jenerik Document1.Controls["Section1"] sapı yalnızca Text/Value/Type/Rows ve GetPropertyValue<T> üyelerini sunar; bu sapta Visible/Enabled yoktur. Görünürlük için tipli Section1 referansının Layout alanını kullanın:
// Section'ı gizle veya göster (Layout üzerinden)
Section1.Layout.Visible = false; // ContainerLayout.Visible (Nullable<bool>)
// İstemci tarafı görünürlük
Section1.Layout.ClientVisible = false; // ContainerLayout.ClientVisible (Nullable<bool>)
// TODO: Document1.Controls["Section1"].Visible / .Enabled YOKTUR; jenerik sapta bu üyeler bulunmaz, derlenmez.
Form kodu (C#, sunucu)
Form kodunda da aynı kural geçerlidir: güçlü tipli Section1 referansı yerleşim üyelerini (Items, Layout, DesignerProps) taşır; görünürlük için Layout alanını kullanın.
// DOĞRU: görünürlük Layout üzerinden
Section1.Layout.Visible = false; // ContainerLayout.Visible (Nullable<bool>)
// İstemci tarafı görünürlük
Section1.Layout.ClientVisible = false; // ContainerLayout.ClientVisible (Nullable<bool>)
// TODO: Section1.Visible / Section1.Enabled YOKTUR; derlenmez.
İstemci kodu (TypeScript, tarayıcı)
İstemci tarafında nesneye this. ile erişirsiniz. İstemci görünürlüğü, tipli referansın Layout.ClientVisible alanı üzerinden yönetilir:
// Section'ı istemci tarafında gizle veya göster
this.Section1.Layout.ClientVisible = false;
Section yalnızca yerleşim içindir; doğrulama veya hesaplama gibi mantığı içindeki nesnelere (TextBox, ComboBox vb.) yazın. Bir grup alanı tek seferde gizlemek/göstermek için onları aynı Section içine koyup Section1.Layout.Visible ile yönetmek en pratik yöntemdir.
İpuçları
- Aynı satırda birden fazla alanı yan yana göstermek için Section'ı Column nesnelerine bölün; her kolona bir nesne yerleştirin.
- Koşula bağlı olarak gizlenecek alanları aynı Section içinde toplayın; böylece tek bir
Section1.Layout.Visibleataması ile hepsini birlikte gösterip gizleyebilirsiniz. - Görünürlük için her zaman
Section1.Layout.Visible(istemci tarafı içinSection1.Layout.ClientVisible) kullanın; tipliSection1referansının doğrudan birVisible/Enabledözelliği yoktur ve jenerikDocument1.Controls["Section1"]sapı da bu üyeleri sunmaz. - Section'ın değeri olmadığı için
OnValueChangedgibi olaylar yoktur; iş mantığını içindeki veri nesnelerine yazın. - Açılıp kapanan başlıklı bir gruplama gerekiyorsa Panel, sekmeli yapı gerekiyorsa Tabs nesnesini tercih edin.
Tüm tasarımcı özellikleri (tam liste)
Section : LayoutControl : BaseControl zincirinde tanımlı tipli üyeler:
General: Name, ControlId
Yerleşim (Layout): Layout (ContainerLayout: Width, Padding, Visible, ClientVisible), DesignerProps (DesignerProps: Layout, AllowAutoClear), Items (List<String>)
Olaylar: ServerEvents, ClientEvents, ExecutedServerEvents (List<EventItem> / List<ControlExecutedServerEvent>)
Yaşam döngüsü kancaları (BaseControl): OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged
Görünürlük: Tipli Section sınıfında doğrudan Visible / Enabled / ClientVisible yoktur; görünürlük Section1.Layout.Visible ve Section1.Layout.ClientVisible (ContainerLayout üzerinde Nullable<Boolean>) alanları üzerinden yönetilir. Jenerik Document1.Controls["Section1"] sapı da bu üyeleri sunmaz; yalnızca Text/Value/Type/Rows/GetPropertyValue<T> sağlar.