الاختيار من متعدد على WinForms
سؤال
ما هي أفضل طريقة لتنفيذ خيار الاختيار المتعدد في Windows Forms؟أريد فرض تحديد واحد من القائمة، بدءًا من القيمة الافتراضية.
يبدو أن ComboBox سيكون خيارًا جيدًا، ولكن هل هناك طريقة لتحديد قيمة افتراضية غير فارغة؟
يمكنني فقط ضبطه في الكود عند نقطة التهيئة المناسبة، لكني أشعر وكأنني أفتقد شيئًا ما.
المحلول
إذا كنت تريد إجابة واحدة فقط من المجموعة، فسيكون عنصر تحكم RadioButton هو الأفضل لك أو يمكنك استخدام ComboBox إذا كان لديك الكثير من الخيارات.لتعيين قيمة افتراضية، ما عليك سوى إضافة العنصر إلى مجموعة ComboBox وتعيين SelectedIndex أو SelectedItem لهذا العنصر.
اعتمادًا على عدد الخيارات التي تنظر إليها، يمكنك استخدام ListBox مع تعيين خاصية SelectionMode على MultiSimple، إذا كانت متعددة الاختيارات أو يمكنك استخدام عنصر تحكم CheckBox.
نصائح أخرى
يجب أن تكون قادرًا على تعيين الخاصية ComboBox.SelectedIndex بالقيمة الافتراضية التي تريدها فقط.
http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindex.aspx
استخدم ال ComboBox.SelectedItem أو الفهرس المحدد الخاصية بعد إدراج العناصر لتحديد العنصر الافتراضي.
يمكنك أيضًا التفكير في استخدام زر الراديو التحكم لفرض تحديد خيار واحد.
يمكنك استخدام ComboBox مع DropDownStyle تم تعيين الخاصية على DropDownList وSelectedIndex على 0 (أو أيًا كان العنصر الافتراضي).سيؤدي هذا إلى فرض وجود عنصر من القائمة المحددة دائمًا.إذا نسيت القيام بذلك، فيمكن للمستخدم كتابة شيء آخر في جزء مربع التحرير - وهو أمر سيئ :)
إذا كنت تعطي المستخدم قائمة صغيرة من الاختيارات، فالتزم بأزرار الاختيار.ومع ذلك، إذا كنت تريد استخدام مربع التحرير والسرد للقوائم الديناميكية أو الطويلة.اضبط النمط على DropDownList.
private sub populateList( items as List(of UserChoices))
dim choices as UserChoices
dim defaultChoice as UserChoices
for each choice in items
cboList.items.add(choice)
'-- you could do user specific check or base it on some other
'---- setting to find the default choice here
if choice.state = _user.State or choice.state = _settings.defaultState then
defaultChoice = choice
end if
next
'-- you chould select the first one
if cboList.items.count > 0 then
cboList.SelectedItem = cboList.item(0)
end if
'-- continuation of hte default choice
cboList.SelectedItem = defaultChoice
end sub