Radio
Aynı gruptaki seçeneklerden yalnızca birinin işaretlenebildiği radyo düğmesi nesnesidir. Birden çok Radio aynı GroupName ile bir grup oluşturur; kullanıcı birini seçince grubun diğerleri otomatik olarak boşalır.
Değer tipi: bool
Ne zaman kullanılır?
Birbirini dışlayan az sayıda seçenek arasından tek bir seçim yaptırmak için idealdir: cinsiyet, evet/hayır, öncelik düzeyi. Tek bir açık/kapalı durumu için CheckBox, çok sayıda seçenek için ComboBox daha uygundur.
Bu nesne tek bir radyo düğmesidir; değeri yalnızca true / false'tur. "N seçenekten hangisi seçili?" anlamını tek bir nesneyle yönetmek isterseniz, her seçenek için ayrı Radio yerleştirmek yerine RadioList nesnesini kullanın. RadioList; Items, DataSource ve SelectedItemValues ile seçenek listesini ve seçili değeri tek nesnede tutar.
Tasarımcı özellikleri
Bir Radio seçildiğinde Özellik Görüntüleyici sekmelere ayrılır.
General
| Özellik | Açıklama |
|---|---|
Name | Nesnenin koddaki adı (ör. Radio1). Koddan bu adla erişirsiniz. |
Field Name | Veritabanındaki alanın adı. |
Label
Nesnenin yanındaki etiketi yönetir.
| Özellik | Açıklama |
|---|---|
Caption / Text | Etiketin yazısı (çok dilli olabilir). |
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 |
|---|---|
GroupName | Radyo grubunun adı. Aynı GroupName değerine sahip nesneler tek bir grup oluşturur; gruptan yalnızca biri seçili olabilir. |
ReadOnly | Nesneyi salt okunur yapar; kullanıcı seçimi değiştiremez. |
Required | Alanı zorunlu yapar; gruptan biri seçilmeden form kaydedilmez. |
Indexable | Nesne değerinin aramada indekslenip indekslenmeyeceği. |
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 | Nesnenin işaretli olup olmadığı (true / false). |
Label | Nesnenin etiket yazısı (çok dilli, MultiLanguageText). |
Title | Fareyle üzerine gelince çıkan ipucu yazısı (çok dilli, MultiLanguageText). |
Context Menu Key / Context Menu Target | Nesneye bağlanacak sağ tık menüsü ve hedefi. |
Olaylar
Bir nesne açılırken Studio'da olaylar belirli bir sırayla tetiklenir; kullanıcı seçimi değiştirince de ayrı olaylar çalışır. Doğru kodu doğru olaya yazmak için bu sırayı bilmek işinizi kolaylaştırır.
Açılış sırası: OnInit → OnLoad → OnDataLoad → OnPreRender → OnRender
Kullanıcı seçim yapınca: OnValueChanging → OnValueChanged
Olaylar iki tarafta çalışabilir: sunucu olayları C# kodunda, istemci olayları tarayıcıdaki TypeScript kodunda. Radio'nun iki tarafta sunduğu olaylar farklıdır.
Aşağıdaki tablolardaki OnInit, OnLoad, OnRender, OnDataLoad, OnPreRender, OnClick, OnDoubleClick, OnPropertyChanging, OnPropertyChanged olayları Studio tasarımcı düzeyindeki olaylardır; bunlara Studio'dan kod gövdesi bağlarsınız. Radio sınıfının kod tarafında gerçek olay üyeleri yalnızca ValueChanging, ValueChanged ve ValidatingEvent'tir (ValidatingEvent salt okunurdur). Yaşam döngüsü/tıklama/özellik olaylarını .NET üzerinden doğrudan abone olunabilen üyeler gibi düşünmeyin.
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. |
OnValidating | Alan doğrulanırken; geçersiz değeri burada engelleyebilirsiniz. |
OnValueChanging | Seçim değişmeden hemen önce (iptal edilebilir). |
OnValueChanged | Kullanıcı seçimi değiştirip değer kesinleştiğinde. En sık kullanılan olaydır. |
İstemci olayları (Client)
Sunucudaki olaylara ek olarak tarayıcı tarafında şunlar da vardır:
| Olay | Ne zaman çalışır |
|---|---|
OnDataLoad | Nesnenin verisi yüklendiğinde. |
OnPreRender | Nesne ekrana çizilmeden hemen önce. |
OnClick / OnDoubleClick | Nesneye tıklanınca / çift tıklanınca. |
OnPropertyChanging / OnPropertyChanged | Bir özellik kodla değiştirilmeden önce / sonra. |
OnValueChanging olayının parametresi (args TS, e C#) şunları taşır:
newValue/NewValue— seçilmek istenen yeni değer (bool)oldValue/OldValue— önceki değercancel/Cancel—trueyapılırsa değişiklik iptal edilir
OnValueChanged olayında cancel yoktur (değişiklik artık gerçekleşmiştir).
Kod örnekleri
Bir Radio'ya üç yerden erişebilirsiniz. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir. Radio'nun değeri bool tipindedir: işaretliyse true, değilse false.
Form kodu (C#, sunucu)
Form kodunda nesneye doğrudan adıyla erişirsiniz. Burada Radio1.Value özelliği güçlü tipli bool döndürür:
// Oku
bool secili = Radio1.Value;
// Yaz (işaretle)
Radio1.Value = true;
// Tasarım anındaki varsayılan değeri temizle
Radio1.ClearDefaultValue();
Akış (Flow) kodu (C#, sunucu)
Akış kodunda nesneye Document1.Controls üzerinden erişirsiniz. Burada indeksleyici object döndürdüğü için .Value'yu doğrudan bool'a atayamazsınız; Convert.ToBoolean(...) ile dönüştürün:
// Oku (Value boxed object'tir, dönüştürmek gerekir)
bool secili = Convert.ToBoolean(Document1.Controls["Radio1"].Value);
// Yaz (işaretle)
Document1.Controls["Radio1"].Value = true;
İ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 secili = this.Radio1.value;
// Yaz (işaretle)
this.Radio1.value = true;
Aynı GroupName değerine sahip Radio nesnelerinden yalnızca biri true olabilir. Birini kodla true yaptığınızda grubun diğer üyeleri otomatik olarak false olur; tek tek boşaltmanıza gerek kalmaz.
Örnek: seçime göre uyarı (OnValueChanging)
OnValueChanging seçim değişmeden hemen önce çalışır; istemediğiniz bir seçimi burada iptal edebilirsiniz. Aşağıdaki örnekte nesnenin işaretlenmesi engellenir.
İstemci (TypeScript):
async Radio1_OnValueChanging(args: Controls.EventArgs.IPropertyChangingEventArgs<boolean>) {
if (args.newValue == true) {
args.cancel = true; // Seçimi iptal eder
this.showMessage("Uyarı", "Bu seçenek şu an seçilemez.", "Validation");
}
}
Sunucu (C#):
void Radio1_OnValueChanging(object sender, PropertyChangingEventArgs<bool> e)
{
if (e.NewValue == true)
{
e.Cancel = true;
ShowMessage("Uyarı", "Bu seçenek şu an seçilemez.",
Bimser.CSP.FormControls.RuleManager.AlertType.Validation);
}
}
İpuçları
- Birbirini dışlayan seçenekleri tek grupta toplamak için tüm nesnelere aynı
GroupNamedeğerini verin. - Kullanıcının bir seçim yapmasını zorunlu kılmak için gruptaki nesnelerde
Requiredözelliğini açın. - Akış kodunda
Document1.Controls["Radio1"].Valueobjectdöner;bool'aConvert.ToBoolean(...)ile çevirin. Form kodundaki güçlü tipliRadio1.Valueise doğrudanbool'tur. - Yalnızca tek bir açık/kapalı durumu kontrol ediyorsanız Radio yerine CheckBox kullanın.
- Çok seçenekli "hangisi seçili?" senaryolarında her seçeneğe ayrı Radio koymak yerine RadioList tercih edin.
Tüm tasarımcı özellikleri (tam liste)
General: Name, Field Name
Label: Caption, Text, Position, Left, Width, Height, Font (Bold / Italic / Underline), Ellipsis, Visible, Show Colon, Horizontal Align, Vertical Align, Mark Char, Mark Position
Behavior: GroupName, ReadOnly, Required, Indexable, Tab Index
Appearance: Visible, Client Visible, Enabled, Client Enabled, Value, Label, Title, Caption, Container Style, Style, Custom Class Name, Context Menu Key, Context Menu Target, Context Menu Column Key
Kodla erişilen üyeler (gerçek .NET): PROP Value (Boolean), GroupName, Label/Title (MultiLanguageText), Caption, Enabled/ClientEnabled, Visible/ClientVisible, ReadOnly, Required, Indexable, TabIndex, Loading, DefaultEnabled/DefaultClientEnabled/DefaultReadOnly, ContextMenuKey/ContextMenuTarget/ContextMenuColumnKey, EntityPath, Style/ContainerStyle, CustomClassName; EVENT ValueChanging, ValueChanged, ValidatingEvent (salt okunur); METHOD ClearDefaultValue(), GetData(), GetDifferences(object), LoadData(...)
Olaylar (Client, Studio): OnInit, OnLoad, OnPreRender, OnRender, OnPropertyChanging, OnPropertyChanged, OnClick, OnDoubleClick, OnDataLoad, OnValidating, OnValueChanging, OnValueChanged
Olaylar (Server, Studio): OnInit, OnLoad, OnRender, OnValidating, OnValueChanging, OnValueChanged