Ana içeriğe geç

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.

Tek Radio mı, RadioList mi?

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

ÖzellikAçıklama
NameNesnenin koddaki adı (ör. Radio1). Koddan bu adla erişirsiniz.
Field NameVeritabanındaki alanın adı.

Label

Nesnenin yanındaki etiketi yönetir.

ÖzellikAçıklama
Caption / TextEtiketin yazısı (çok dilli olabilir).
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
GroupNameRadyo grubunun adı. Aynı GroupName değerine sahip nesneler tek bir grup oluşturur; gruptan yalnızca biri seçili olabilir.
ReadOnlyNesneyi salt okunur yapar; kullanıcı seçimi değiştiremez.
RequiredAlanı zorunlu yapar; gruptan biri seçilmeden form kaydedilmez.
IndexableNesne değerinin aramada indekslenip indekslenmeyeceği.
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ığı.
ValueNesnenin işaretli olup olmadığı (true / false).
LabelNesnenin etiket yazısı (çok dilli, MultiLanguageText).
TitleFareyle üzerine gelince çıkan ipucu yazısı (çok dilli, MultiLanguageText).
Context Menu Key / Context Menu TargetNesneye 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ı: OnInitOnLoadOnDataLoadOnPreRenderOnRender

Kullanıcı seçim yapınca: OnValueChangingOnValueChanged

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.

Kodla erişilen olaylar yalnızca üç tanedir

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)

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.
OnValidatingAlan doğrulanırken; geçersiz değeri burada engelleyebilirsiniz.
OnValueChangingSeçim değişmeden hemen önce (iptal edilebilir).
OnValueChangedKullanı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:

OlayNe zaman çalışır
OnDataLoadNesnenin verisi yüklendiğinde.
OnPreRenderNesne ekrana çizilmeden hemen önce.
OnClick / OnDoubleClickNesneye tıklanınca / çift tıklanınca.
OnPropertyChanging / OnPropertyChangedBir özellik kodla değiştirilmeden önce / sonra.
Olay parametreleri

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ğer
  • cancel / Canceltrue yapı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;
Grup mantığı

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ı GroupName değ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"].Value object döner; bool'a Convert.ToBoolean(...) ile çevirin. Form kodundaki güçlü tipli Radio1.Value ise doğrudan bool'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