Mirror
Başka bir nesnenin değerini yansıtan (aynalayan) yardımcı nesnedir. Kaynak nesnedeki veri değiştiğinde Mirror aynı veriyi formun ikinci bir yerinde otomatik olarak gösterir. Kendi başına bir değer tutmaz; gösterdiği veri her zaman bağlı olduğu kaynak nesneden gelir.
Mirror, hangi nesneyi yansıtacağını tek bir özellik üzerinden bilir: TargetId. Bu özellik, yansıtılacak kaynak nesnenin kimliğini (ControlId) tutar. Mirror'ın tüm davranışı bu bağa dayanır.
Değer tipi: Bu nesnenin bir değeri yoktur.
Ne zaman kullanılır?
Uzun bir formda aynı bilgiyi iki ayrı yerde göstermek istediğinizde kullanılır. Örneğin formun en üstündeki talep numarasını sayfanın altında tekrar görünür kılmak, ya da bir sekmedeki tutarı başka bir sekmede özet olarak yansıtmak için idealdir. Kullanıcının veriyi tekrar girmesine gerek kalmaz; tek bir kaynak vardır, Mirror yalnızca onu yansıtır.
Düzenlenebilir ikinci bir alan istiyorsanız Mirror uygun değildir; o durumda ilgili giriş nesnesini (TextBox, NumberBox vb.) kullanın.
Tasarımcı özellikleri
Mirror son derece sade bir yardımcı nesnedir. Sınıf hiyerarşisinde doğrudan BaseControl'den türer; giriş ve görünüm nesnelerindeki Visible, Value, Enabled, ReadOnly gibi alanların hiçbirine sahip değildir. Bir Mirror seçildiğinde Özellik Görüntüleyici'de yalnızca temel tanım özellikleri ile yansıtılacak kaynağı belirleyen TargetId bulunur.
General
| Özellik | Açıklama |
|---|---|
Name | Nesnenin koddaki adı (ör. Mirror1). Koddan bu adla erişirsiniz. |
TargetId | Yansıtılacak kaynak nesnenin kimliği (ControlId). Mirror'ın hangi nesneyi aynalayacağını belirleyen tek özelliktir. Tasarımcıda kaynak nesneyi seçtiğinizde otomatik dolar. |
ControlId | Mirror nesnesinin kendi kimliğidir. Nadiren koddan kullanılır. |
Mirror, BaseControl'den türeyen en yalın nesnedir. Kendine ait Behavior veya Appearance özelliği (ör. Visible, Enabled, Placeholder, Text Align) taşımaz. Görünümü ve davranışı tamamen TargetId ile bağlandığı kaynak nesneye göre şekillenir.
Olaylar
BaseControl üzerindeki yaşam döngüsü kancaları (OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged) Mirror için de geçerlidir. Bunlar koddan ele alınabilen yaşam döngüsü metotlarıdır.
Mirror'ın kendine ait bir değeri olmadığı için değer değişimi olayı yoktur (OnValueChanging / OnValueChanged yoktur). Ayrıca tıklama (OnClick / OnDoubleClick) ve veri yükleme (OnDataLoad) olayları da Mirror üzerinde bulunmaz; bu olaylar başka temel sınıflardan (VisualControl, DataBoundControl) gelir ve Mirror onları miras almaz.
Açılış sırası: OnInit → OnLoad → OnPreRender → OnRender
Yaşam döngüsü metotları
| Metot | İmza | Ne zaman çalışır |
|---|---|---|
OnInit | OnInit(object sender, InitEventArgs e) | Form açılırken nesne oluşturulduğunda, en başta. |
OnLoad | OnLoad(object sender, LoadEventArgs e) | OnInit'in hemen ardından, nesne yüklenince. |
OnPreRender | OnPreRender(object sender, PreRenderEventArgs e) | Nesne ekrana çizilmeden hemen önce. |
OnRender | OnRender(object sender, RenderEventArgs e) | Nesne ekrana çizilirken. |
OnPropertyChanging | OnPropertyChanging(object sender, PropertyChangingEventArgs<object> e) | Bir özellik kodla değişmeden önce. |
OnPropertyChanged | OnPropertyChanged(object sender, PropertyChangedEventArgs<object> e) | Bir özellik kodla değiştikten sonra. |
Kod örnekleri
Mirror'ın bir değeri ve Visible özelliği olmadığı için ona doğrudan veri okuyup yazmazsınız. Pratikte gerçek veriyi ve görünürlüğü kaynak nesne üzerinden yönetirsiniz; Mirror yansımayı kendisi günceller. Aşağıdaki örneklerde kaynak nesne TalepNo'dur ve Mirror onu TargetId ile yansıtır. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir.
Form kodu (C#, sunucu)
Asıl veriyi ve görünürlüğü kaynak nesneye yazarsınız; Mirror onu otomatik yansıtır:
// Asıl veri kaynak nesneye yazılır, Mirror onu yansıtır
TalepNo.Value = "TLP-2026-0145";
// Yansımayı gizlemek isterseniz KAYNAK nesneyi gizlersiniz, Mirror'ın değil
TalepNo.Visible = false;
// Mirror'ın hangi nesneyi yansıttığını koddan değiştirmek (nadiren gerekir)
Mirror1.TargetId = TalepNo.ControlId;
Akış (Flow) kodu (C#, sunucu)
Akış kodunda nesnelere Document1.Controls üzerinden erişirsiniz; yine kaynak nesne üzerinden çalışırsınız:
// Asıl veriyi kaynak nesneye yaz, Mirror yansıtsın
Document1.Controls["TalepNo"].Value = "TLP-2026-0145";
// Yansımayı gizlemek için kaynak nesneyi gizleyin
Document1.Controls["TalepNo"].Visible = false;
İstemci kodu (TypeScript, tarayıcı)
İstemci tarafında da değeri ve görünürlüğü kaynak nesneden yönetirsiniz; Mirror'ın value ya da visible özelliği yoktur:
// Asıl değeri kaynak nesneye yaz, Mirror anında yansıtır
this.TalepNo.value = "TLP-2026-0145";
// Yansımayı gizlemek için kaynak nesneyi gizleyin
this.TalepNo.visible = false;
Mirror'ın Value, Visible, Enabled gibi özellikleri yoktur; bunları Mirror üzerinde set etmeye çalışmak derlenmez ya da çalışmaz. Tek doğru kaynak, TargetId ile bağlandığı nesnedir. Veriyi ve görünürlüğü her zaman kaynak nesneye yazın; Mirror yansımayı kendisi yönetir.
İpuçları
- Mirror'ı, aynı bilgiyi iki kez girdirmek yerine tek kaynaktan yansıtmak için kullanın. Böylece veri tutarlılığını kod yazmadan sağlarsınız.
- Yansıtılacak nesneyi
TargetIdbelirler. Tasarımcıda kaynağı seçmek bunu otomatik doldurur; koddan değiştirmeniz çok nadiren gerekir. - Mirror salt görüntülemedir; kullanıcının düzenleyebileceği ikinci bir alan gerekiyorsa gerçek bir giriş nesnesi ekleyin.
- Yansımayı gizlemek isterseniz Mirror'ı değil, kaynak nesneyi
Visible = falseile gizleyin. Mirror'ın kendiVisibleözelliği bulunmaz.
Tüm tasarımcı özellikleri (tam liste)
General: Name, TargetId, ControlId
Behavior / Appearance: yok (Mirror'ın kendine ait davranış veya görünüm özelliği yoktur; tümü TargetId ile bağlı kaynaktan gelir)
Yaşam döngüsü metotları: OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged
Olay yok: OnValueChanging / OnValueChanged, OnClick / OnDoubleClick ve OnDataLoad Mirror üzerinde bulunmaz.
Metot: GetDifferences(object otherObj)