Panel
Form üzerindeki birden çok nesneyi başlıklı bir çerçeve içinde toplayan kapsayıcı nesnedir. İlgili alanları bir arada göstererek formu düzenli ve okunaklı tutar; istenirse başlığına tıklanarak açılıp kapanabilir.
Değer tipi: Bu nesnenin bir değeri yoktur. Panel, içine yerleştirdiğiniz nesneleri gruplayan görsel bir kapsayıcıdır; saklanan bir değeri yoktur, koddan değerini okumazsınız. Panelin içindeki her nesnenin değerini ise kendi adıyla okursunuz.
Ne zaman kullanılır?
Formdaki alanlar mantıksal bölümlere ayrılıyorsa kullanın: "Kişisel Bilgiler", "Adres Bilgileri", "Talep Detayı" gibi. Az kullanılan ya da koşullu görünen alanları katlanabilir bir panele koyarak formu sade tutabilirsiniz. Sadece görsel boşluk/ayraç gerekiyorsa Divider, sekmeli bölümleme için Tabs daha uygundur.
Tasarımcı özellikleri
Bir Panel seçildiğinde Özellik Görüntüleyici üç sekmeye ayrılır. Panelin bir veri alanı olmadığı için Field Name ve Size gibi veritabanı özellikleri yoktur.
General
| Özellik | Açıklama |
|---|---|
Name | Nesnenin koddaki adı (ör. Panel1). Koddan bu adla erişirsiniz. |
Behavior
| Özellik | Açıklama |
|---|---|
CollapsedDefault | Panelin form ilk açıldığında kapalı (katlanmış) gelip gelmeyeceğini belirler. true ise başlangıçta kapalı durur. |
HeaderMode | Panel başlığının gösterim biçimini belirler: başlık yok (None), başlıklı (Titled) ya da katlanabilir (Collapsible). Katlanabilir modda kullanıcı başlığa tıklayarak paneli açıp kapatabilir. |
ReadOnly | Paneli salt okunur yapar; içindeki nesneler de salt okunur davranır. Tasarım zamanı başlangıç değerini DefaultReadOnly belirler. |
TitleFont | Panel başlığının yazı tipi, kalınlığı ve stili (Font). |
Appearance
| Özellik | Açıklama |
|---|---|
Title | Panelin üst kısmında görünen başlık yazısı (MultiLanguageText, çok dilli olabilir). |
Caption | Panelin etiket/başlık tanımı (ControlCaption). |
Visible / Client Visible | Nesnenin görünürlüğü. Panel gizlenince içindeki tüm nesneler de gizlenir. |
Enabled / Client Enabled | Nesnenin aktif olup olmadığı. Panel pasifken içindeki nesneler de pasif davranır. Tasarım zamanı başlangıç değerlerini DefaultEnabled / DefaultClientEnabled belirler. |
CustomClassName | Panele uygulanacak özel CSS sınıfı; görünümü kendi stilinizle özelleştirmek için. |
Style / ContainerStyle | Panelin ve sarmalayan hücresinin stili (Style: arka plan, dolgu, yükseklik gibi). |
Loading | true iken panelin üzerine yükleniyor örtüsü çizilir. Genelde ShowLoading() / HideLoading() ile yönetilir. |
ContextMenuKey / ContextMenuColumnKey / ContextMenuTarget | Panele bir ContextMenu nesnesi bağlar. ContextMenuTarget, menünün neye uygulanacağını belirler (Container / Row / Column / None). |
Olaylar
Panel kapsayıcı bir nesnedir; veriye dayalı kendi değer/metin olayları yoktur (OnValueChanged, OnTextChanged gibi olaylar Panel'de bulunmaz). Yalnızca her nesnede ortak olan yaşam döngüsü olaylarını ve tıklama olaylarını sunar.
Açılış sırası: OnInit → OnLoad → OnPreRender → OnRender
Olaylar iki tarafta çalışabilir: sunucu olayları C# kodunda, istemci olayları tarayıcıdaki TypeScript kodunda. OnClick / OnDoubleClick her iki tarafta da bulunur.
Sunucu olayları (Server)
| 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. |
OnRender | Nesne ekrana çizilirken. |
OnClick / OnDoubleClick | Panele tıklanınca / çift tıklanınca. |
İstemci olayları (Client)
Sunucudaki olaylara ek olarak tarayıcı tarafında şunlar da vardır:
| Olay | Ne zaman çalışır |
|---|---|
OnPreRender | Nesne ekrana çizilmeden hemen önce. |
OnClick / OnDoubleClick | Panele tıklanınca / çift tıklanınca. |
OnPropertyChanging / OnPropertyChanged | Bir özellik kodla değiştirilmeden önce / sonra. |
Kod örnekleri
Panelin bir değeri olmadığı için .Value okumaz/yazmazsınız. Panelle yapacağınız iş genellikle görünürlüğünü, aktifliğini ya da salt okunurluğunu kodla kontrol etmek ve başlığını değiştirmektir. Bir bölümün tamamını tek satırla yönetebildiğiniz için panel bu iş için çok kullanışlıdır. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir.
Form kodu (C#, sunucu)
Form kodunda panele doğrudan adıyla erişirsiniz. Burada nesne, güçlü tipli Panel örneğidir; Visible, Enabled, ReadOnly ve Title gibi özellikleri doğrudan kullanabilirsiniz:
// Paneli gizle / göster (içindeki tüm nesneler de gizlenir)
Panel1.Visible = false;
// Paneli pasifleştir / aktifleştir
Panel1.Enabled = false;
// Paneli salt okunur yap (içindeki nesneler de salt okunur davranır)
Panel1.ReadOnly = true;
// Panel başlığını değiştir (Title çok dilli bir alandır)
Panel1.Title = "Adres Bilgileri";
// Özel CSS sınıfı uygula
Panel1.CustomClassName = "vurgulu-bolum";
VisualControl'tan miras gelen çalışma zamanı yardımcılarıyla aynı işi yöntem çağrılarıyla da yapabilirsiniz. Bunlar bir kapsayıcı için doğal fiilllerdir:
// .Visible = false/true yerine
Panel1.Hide();
Panel1.Show();
// Panelin üzerine yükleniyor örtüsü çiz / kaldır / değiştir
Panel1.ShowLoading();
Panel1.HideLoading();
Panel1.ToggleLoading();
// Paneli görünür alana kaydır
Panel1.ScrollTo();
Akış (Flow) kodu (C#, sunucu)
Akış kodunda nesnelere Document1.Controls["..."] üzerinden erişilir. Buradan dönen genel Control tutamacı (Bimser.Synergy.ServiceAPI.Models.Form.Control) yalnızca Text, Value, Type, Rows, GetGroup() ve okuma amaçlı GetPropertyValue<T>(...) üyelerini taşır. Panelin değeri olmadığı için akıştan okunacak bir .Value da yoktur; bir özelliğini okumanız gerekirse GetPropertyValue<T> kullanın:
// Bir panel özelliğini akıştan OKUMA (getter)
bool gorunur = Document1.Controls["Panel1"].GetPropertyValue<bool>("Visible");
Akış tutamacının Visible veya Title gibi bir setter'ı doğrulanmamıştır; Document1.Controls["Panel1"].Visible = false; ya da ... .Title = "..." yazımı bu genel tutamaçta geçerli değildir. Paneli görünür/gizli yapmak, başlığını değiştirmek gibi yazma işlerini güçlü tipli Panel üzerinden form kodunda yapın (yukarıdaki bölüm) ya da görünürlüğü OnInit/OnLoad form olayında belirleyin.
İstemci kodu (TypeScript, tarayıcı)
İstemci tarafında nesnelere this. ile erişilir ve özellik adları küçük harfle yazılır (visible, enabled, title):
this.Panel1.visible = false;
this.Panel1.enabled = false;
this.Panel1.title = "Adres Bilgileri";
Panel, TextBox gibi bir veri nesnesi değildir; saklanan bir değeri yoktur. Panelle yaptığınız iş, içindeki nesneleri gruplamak ve tüm grubu tek hamlede gizleyip göstermek ya da pasifleştirmektir. Bir alanın değerini okumak için panelin içindeki nesneye kendi adıyla erişin.
Örnek: bir bölümü koşullu gösterme
Bir alanın değerine göre ilgili paneli gizleyip gösterebilirsiniz. Aşağıdaki örnekte, "Fatura adresi farklı" seçeneği işaretlenince fatura adresi paneli görünür olur.
İstemci (TypeScript):
async FarkliAdres_OnValueChanged(args: Controls.EventArgs.IPropertyChangedEventArgs<boolean>) {
this.FaturaAdresiPaneli.visible = args.newValue; // İşaretliyse paneli gösterir
}
Örnek: bölümün üzerine yükleniyor örtüsü koyma
Bir bölüm için uzun süren bir sunucu çağrısı yapılırken, panelin üzerine yükleniyor örtüsü koyarak kullanıcıyı bekletebilirsiniz. İşlem bitince örtüyü kaldırırsınız.
// İşlem başlarken bölümü kilitle
Panel1.ShowLoading();
// ... uzun süren işlem / veri hazırlığı ...
// İşlem bitince örtüyü kaldır
Panel1.HideLoading();
İpuçları
- Formu mantıksal bölümlere ayırmak için her bölümü ayrı bir panele koyun; kullanıcı uzun formu daha kolay takip eder.
- Az kullanılan alanları
CollapsedDefaultile başlangıçta kapalı bir panele koyarak formu sade tutun; gerektiğinde kullanıcı başlığa tıklayıp açar. - Bir bölümün tamamını tek satırla gizlemek için tek tek nesneleri değil paneli
Hide()/visible = falseyapın; içindeki tüm nesneler birlikte gizlenir. Aynı şekildeReadOnly = truetüm bölümü salt okunur yapar. - Panelin görünümünü temadan bağımsız özelleştirmek için
CustomClassNameile kendi CSS sınıfınızı bağlayın; arka plan/dolgu/yükseklik gibi ayarlar içinStyle/ContainerStylekullanın.
Tüm tasarımcı özellikleri (tam liste)
General: Name
Behavior: CollapsedDefault, HeaderMode, ReadOnly, TitleFont, DefaultEnabled, DefaultClientEnabled, DefaultReadOnly
Appearance: Title, Caption, Visible, Client Visible, Enabled, Client Enabled, CustomClassName, Style, ContainerStyle, Loading, ContextMenuKey, ContextMenuColumnKey, ContextMenuTarget
Çalışma zamanı yöntemleri (VisualControl): Show(), Hide(), ShowLoading(), HideLoading(), ToggleLoading(), ScrollTo(), FireClick()
Olaylar (Client): OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged, OnClick, OnDoubleClick
Olaylar (Server): OnInit, OnLoad, OnRender, OnClick, OnDoubleClick