Skip to main content

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

ÖzellikAçıklama
NameNesnenin koddaki adı (ör. Panel1). Koddan bu adla erişirsiniz.

Behavior

ÖzellikAçıklama
CollapsedDefaultPanelin form ilk açıldığında kapalı (katlanmış) gelip gelmeyeceğini belirler. true ise başlangıçta kapalı durur.
HeaderModePanel 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.
ReadOnlyPaneli salt okunur yapar; içindeki nesneler de salt okunur davranır. Tasarım zamanı başlangıç değerini DefaultReadOnly belirler.
TitleFontPanel başlığının yazı tipi, kalınlığı ve stili (Font).

Appearance

ÖzellikAçıklama
TitlePanelin üst kısmında görünen başlık yazısı (MultiLanguageText, çok dilli olabilir).
CaptionPanelin etiket/başlık tanımı (ControlCaption).
Visible / Client VisibleNesnenin görünürlüğü. Panel gizlenince içindeki tüm nesneler de gizlenir.
Enabled / Client EnabledNesnenin aktif olup olmadığı. Panel pasifken içindeki nesneler de pasif davranır. Tasarım zamanı başlangıç değerlerini DefaultEnabled / DefaultClientEnabled belirler.
CustomClassNamePanele uygulanacak özel CSS sınıfı; görünümü kendi stilinizle özelleştirmek için.
Style / ContainerStylePanelin ve sarmalayan hücresinin stili (Style: arka plan, dolgu, yükseklik gibi).
Loadingtrue iken panelin üzerine yükleniyor örtüsü çizilir. Genelde ShowLoading() / HideLoading() ile yönetilir.
ContextMenuKey / ContextMenuColumnKey / ContextMenuTargetPanele 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ı: OnInitOnLoadOnPreRenderOnRender

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)

OlayNe zaman çalışır
OnInitForm açılırken nesne oluşturulduğunda, en başta.
OnLoadOnInit'in hemen ardından, nesne yüklenince.
OnRenderNesne ekrana çizilirken.
OnClick / OnDoubleClickPanele tıklanınca / çift tıklanınca.

İstemci olayları (Client)

Sunucudaki olaylara ek olarak tarayıcı tarafında şunlar da vardır:

OlayNe zaman çalışır
OnPreRenderNesne ekrana çizilmeden hemen önce.
OnClick / OnDoubleClickPanele tıklanınca / çift tıklanınca.
OnPropertyChanging / OnPropertyChangedBir ö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ıştan Visible/Title yazmayın

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";
Panelde değer aramayın

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ı CollapsedDefault ile 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 = false yapın; içindeki tüm nesneler birlikte gizlenir. Aynı şekilde ReadOnly = true tüm bölümü salt okunur yapar.
  • Panelin görünümünü temadan bağımsız özelleştirmek için CustomClassName ile kendi CSS sınıfınızı bağlayın; arka plan/dolgu/yükseklik gibi ayarlar için Style / ContainerStyle kullanı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