Ana içeriğe geç

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

ÖzellikAçıklama
NameNesnenin koddaki adı (ör. Switch1). Koddan bu adla erişirsiniz.
Field NameVeritabanı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.

ÖzellikAçıklama
CaptionEtiketin yazısı (çok dilli olabilir). Sınıfta ControlCaption tipindeki etiket nesnesidir.
PositionEtiketin yeri: solda (Left) veya üstte (Top).
Width / HeightEtiketin boyutu.
FontYazı tipi, kalın / italik / altı çizili.
Show ColonEtiketin sonuna iki nokta (:) ekler.
Horizontal Align / Vertical AlignEtiketin hizası.
VisibleEtiketi gösterir veya gizler.

Behavior

ÖzellikAçıklama
ReadOnlyAnahtarı salt okunur yapar; kullanıcı durumu değiştiremez.
RequiredAlanı zorunlu yapar; değer beklenir.
Tab IndexTab tuşuyla geçiş sırasını belirler.

Appearance

ÖzellikAçıklama
Visible / Client VisibleNesnenin görünürlüğü.
Enabled / Client EnabledNesnenin aktif olup olmadığı.
ValueAnahtarın durumu (açık true / kapalı false).
TitleNesnenin 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: OnValueChangingOnValueChanged

Olaylar iki tarafta çalışabilir: sunucu olayları C# kodunda, istemci olayları tarayıcıdaki TypeScript kodunda.

Sunucu olayları (Server)

OlayNe zaman çalışır
OnValueChangingAnahtar durumu değişmeden hemen önce (iptal edilebilir).
OnValueChangedAnahtar durumu kesinleştiğinde. En sık kullanılan olaydır.
OnValidatingForm kaydedilmeden önce değer doğrulanırken.

İstemci olayları (Client)

Tarayıcı tarafında da aynı değer olayları kullanılabilir:

OlayNe zaman çalışır
OnValueChangingAnahtar durumu değişmeden hemen önce (iptal edilebilir).
OnValueChangedAnahtar durumu kesinleştiğinde.
Olay parametreleri

OnValueChanging olayının parametresi (args TS, e C#) şunları taşır:

  • newValue / NewValue — yeni durum (true / false)
  • oldValue / OldValue — önceki durum
  • cancel / Canceltrue yapılırsa değişiklik iptal edilir (yalnızca Changing olayları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ışta ada göre yazma

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;
.Value'nun boş olma durumu

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 bool olduğundan boş kontrolü yapmanıza gerek yoktur; doğrudan if (Switch1.Value) ile dallanın. Akışta okurken Convert.ToBoolean(Document1.Controls["Switch1"].Value) kullanın.
  • Anahtarın yanındaki etiketi Caption ile, nesnenin başlığını Title ile 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