Switch
Kullanıcının açık / kapalı (evet / hayır) seçimini tek dokunuşla yaptığı aç-kapa anahtarı nesnesidir. Değeri her zaman iki durumludur: açık ya da kapalı.
Değer tipi: bool
Ne zaman kullanılır?
İki durumlu bir tercih için idealdir: "Aktif mi?", "Onaylıyor musunuz?", "SMS gönderilsin mi?". Bir ayarı anında açıp kapatma hissi verir. Sadece bir kutu işaretletmek istiyorsanız CheckBox, birden çok seçenekten birini seçtirmek istiyorsanız RadioButton daha uygundur.
Tasarımcı özellikleri
Bir Switch seçildiğinde Özellik Görüntüleyici sekmelere ayrılır.
General
| Özellik | Açıklama |
|---|---|
Name | Nesnenin koddaki adı (ör. Switch1). Koddan bu adla erişirsiniz. |
Field Name | Veritabanındaki alanın adı. |
Label
Nesnenin yanındaki etiketi yönetir. Bu etiket, sınıfta Caption (tip: ControlCaption) üyesidir ve nesnenin başlığı olan Title (tip: MultiLanguageText) ile karıştırılmamalıdır.
| Özellik | Açıklama |
|---|---|
Caption | Etiketin yazısı (çok dilli olabilir). Sınıfta ControlCaption tipindeki etiket nesnesidir. |
Position | Etiketin yeri: solda (Left) veya üstte (Top). |
Width / Height | Etiketin boyutu. |
Font | Yazı tipi, kalın / italik / altı çizili. |
Show Colon | Etiketin sonuna iki nokta (:) ekler. |
Horizontal Align / Vertical Align | Etiketin hizası. |
Visible | Etiketi gösterir veya gizler. |
Behavior
| Özellik | Açıklama |
|---|---|
ReadOnly | Anahtarı salt okunur yapar; kullanıcı durumu değiştiremez. |
Required | Alanı zorunlu yapar; değer beklenir. |
Tab Index | Tab tuşuyla geçiş sırasını belirler. |
Appearance
| Özellik | Açıklama |
|---|---|
Visible / Client Visible | Nesnenin görünürlüğü. |
Enabled / Client Enabled | Nesnenin aktif olup olmadığı. |
Value | Anahtarın durumu (açık true / kapalı false). |
Title | Nesnenin başlık yazısı (çok dilli, MultiLanguageText). |
Olaylar
Switch yalnızca değer değişimi ve doğrulama olaylarını sunar. Metin tabanlı nesnelerdeki (TextBox gibi) OnTextChanging / OnTextChanged olayları Switch'te yoktur; çünkü Switch'in metni değil, yalnızca bool değeri vardır.
Kullanıcı anahtarı çevirince: OnValueChanging → OnValueChanged
Olaylar iki tarafta çalışabilir: sunucu olayları C# kodunda, istemci olayları tarayıcıdaki TypeScript kodunda.
Sunucu olayları (Server)
| Olay | Ne zaman çalışır |
|---|---|
OnValueChanging | Anahtar durumu değişmeden hemen önce (iptal edilebilir). |
OnValueChanged | Anahtar durumu kesinleştiğinde. En sık kullanılan olaydır. |
OnValidating | Form kaydedilmeden önce değer doğrulanırken. |
İstemci olayları (Client)
Tarayıcı tarafında da aynı değer olayları kullanılabilir:
| Olay | Ne zaman çalışır |
|---|---|
OnValueChanging | Anahtar durumu değişmeden hemen önce (iptal edilebilir). |
OnValueChanged | Anahtar durumu kesinleştiğinde. |
OnValueChanging olayının parametresi (args TS, e C#) şunları taşır:
newValue/NewValue— yeni durum (true/false)oldValue/OldValue— önceki durumcancel/Cancel—trueyapılırsa değişiklik iptal edilir (yalnızcaChangingolaylarında)
OnValueChanged olayında cancel yoktur (değişiklik artık gerçekleşmiştir).
Kod örnekleri
Bir Switch'e üç yerden erişebilirsiniz. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir. Değeri her zaman bool (mantıksal doğru / yanlış) tipindedir.
Form kodu (C#, sunucu)
Form kodunda nesneye doğrudan adıyla erişirsiniz; Value burada güçlü tipli bool'tur:
// Oku
bool acik = Switch1.Value;
// Yaz
Switch1.Value = true; // Anahtarı aç
Switch1.Value = false; // Anahtarı kapat
Akış (Flow) kodu (C#, sunucu)
Akış kodunda nesneye Document1.Controls üzerinden erişirsiniz. Genel Controls[...] indeksleyicisi object döndürür; bu yüzden okurken Convert.ToBoolean(...) ile dönüştürmeniz gerekir:
// Oku (doğrulanmış kalıp)
bool acik = Convert.ToBoolean(Document1.Controls["Switch1"].Value);
// Yaz (ada göre yazma)
Document1.Controls["Switch1"].Value = true;
Akıştan bir Switch'i adıyla yazmak (Controls["Switch1"].Value = true;) CheckBox ile aynı bool sözleşmesini izler. Doğrulanmış kaynaklarda bu kalıbı doğrudan yazan bir örnek bulunmadığından bir uç durum olarak değerlendirin; değer her zaman bool olmalıdır.
İstemci kodu (TypeScript, tarayıcı)
İstemci tarafında nesnelere this. ile erişilir ve özellik adları küçük harfle yazılır (value):
// Oku
const acik = this.Switch1.value;
// Yaz
this.Switch1.value = true;
Güçlü tipli form kodunda Switch1.Value her zaman gerçek bir bool'tur; boş (null) olmaz, doğrudan if (Switch1.Value) yazabilirsiniz. Ancak akış kodunda Controls["Switch1"].Value object tipindedir ve henüz hiç set edilmemişse null olabilir. Akışta okurken Convert.ToBoolean(...) kullanın; bu, boş değeri false'a çevirir.
Örnek: değeri doğrulama (OnValueChanging)
OnValueChanging anahtar durumu değişmeden hemen önce çalışır; istemediğiniz bir geçişi burada iptal edebilirsiniz. Aşağıdaki örnekte başka bir koşul sağlanmadan anahtarın açılması engellenir.
İstemci (TypeScript):
async Switch1_OnValueChanging(args: Controls.EventArgs.IPropertyChangingEventArgs<boolean>) {
if (args.newValue == true && this.Onay1.value == false) {
args.cancel = true; // Açma işlemini iptal eder
this.showMessage("Uyarı", "Önce onay kutusunu işaretleyin.", "Validation");
}
}
Sunucu (C#):
void Switch1_OnValueChanging(object sender, PropertyChangingEventArgs<bool> e)
{
if (e.NewValue == true && (bool)Onay1.Value == false)
{
e.Cancel = true;
ShowMessage("Uyarı", "Önce onay kutusunu işaretleyin.",
Bimser.CSP.FormControls.RuleManager.AlertType.Validation);
}
}
İpuçları
- Güçlü tipli form kodunda değer
boololduğundan boş kontrolü yapmanıza gerek yoktur; doğrudanif (Switch1.Value)ile dallanın. Akışta okurkenConvert.ToBoolean(Document1.Controls["Switch1"].Value)kullanın. - Anahtarın yanındaki etiketi
Captionile, nesnenin başlığınıTitleile ayarlayın; ikisi farklı üyelerdir. - Birden fazla seçenekten birini seçtirmeniz gerekiyorsa Switch yerine RadioButton kullanın.
Tüm tasarımcı özellikleri (tam liste)
General: Name, Field Name
Label: Caption, Position, Left, Width, Height, Font (Bold / Italic / Underline), Visible, Show Colon, Horizontal Align, Vertical Align
Behavior: ReadOnly, Required, Tab Index
Appearance: Visible, Client Visible, Enabled, Client Enabled, Value, Title
Olaylar (Server): OnValueChanging, OnValueChanged, OnValidating
Olaylar (Client): OnValueChanging, OnValueChanged