Как сделать, чтобы поле со списком Да / Нет возвращало значение true / false? - PullRequest
1 голос
/ 25 ноября 2010

Я новичок в создании форм в Visual Studio и C #.Но я создал пользовательский интерфейс, в котором есть несколько выпадающих списков, где DropDownStyle - DropDownList.Показанные элементы - «Да» и «Нет». Но мне нужно присвоить это значение как логическое значение свойству некоторого объекта ai, и в настоящее время я делаю это:

    if (cmbExample.Text == "Yes")
    {
        ai.isPacketType = true;
    }
    else if (cmbExample.Text == "No")
    {
        ai.isPacketType = false;
    }

Я в основном хочу сделать что-то подобное (или некоторые другие).еще один вкладыш):

ai.isPacketType = cmbExample.Text;

Как связать текст Да со значением true, а Нет со false?

Ответы [ 7 ]

3 голосов
/ 25 ноября 2010

Вы можете сделать это так:

ai.isPacketType = (cmbExample.Text == "Yes");

Или, если isPacketType равно bool?:

ai.isPacketType = string.IsNullOrEmpty(cmbExample.Text) ? (bool?)null : cmbExample.Text == "Yes";
1 голос
/ 14 января 2011

Если вы хотите сделать это, и вы используете привязку данных, есть небольшой удобный способ сделать это, описанный в этом сообщении в блоге . В основном вы настроили пару пар ключ-значение:

private List<KeyValuePair<string, bool>> GenerateYesNo()

{
    List<KeyValuePair<string, bool>> yesNoChoices = new List<KeyValuePair<string,bool>>();

    yesNoChoices.Add(new KeyValuePair<string, bool>("Yes", true));
    yesNoChoices.Add(new KeyValuePair<string, bool>("No", false));    
    return yesNoChoices;
 }

Или в VB.Net:

Private Function GenerateYesNo() As List(Of KeyValuePair(Of String, Boolean))
    Dim yesNoChoices As New List(Of KeyValuePair(Of String, Boolean))

    yesNoChoices.Add(New KeyValuePair(Of String, Boolean)("Yes", True))
    yesNoChoices.Add(New KeyValuePair(Of String, Boolean)("No", False))

    Return yesNoChoices
End Function

и привязать к этому набору пар. Для получения полной информации перейдите по ссылке блога.

0 голосов
/ 25 ноября 2010

Не могу ли вы использовать свойство 'Checked', которое даст вам true, проверено и false, если не отмечено:

ai.isPacketType = cmbExample.Checked;

0 голосов
/ 25 ноября 2010

Вы можете использовать ai.isPacketType = cmbExample.Text == "Yes" (с учетом регистра) или ai.isPacketType = string.Compare(cmbExample.Text, "Yes", true) == 0 (без учета регистра).

0 голосов
/ 25 ноября 2010

В идеале вы, вероятно, захотите создать небольшой класс / структуру-оболочку для Boolean.Затем вы можете переопределить значение ToString (), чтобы вернуть либо Да, либо Нет.

Базовое значение останется прежним, но пользовательский интерфейс отобразит другое значение с помощью свойств ValueMember и DisplayMember в ComboBox.

Вероятно, это будет считаться подходом MVVM, добавив ViewModel к вашим данным, чтобы они хорошо выглядели в пользовательском интерфейсе, без непосредственного использования какого-либо условного кода.

0 голосов
/ 25 ноября 2010

Вы, конечно, можете написать это так

ai.isPacketType = cmbExample.Text == "Yes";
0 голосов
/ 25 ноября 2010
ai.isPacketType = (cmbExample.Text == "Yes");
...