Отображать ComboBox "Cue Banner", когда DropDownStyle = DropDownList - PullRequest
0 голосов
/ 09 мая 2011

У меня есть ComboBox. Я хочу разрешить выбирать только перечисленные элементы. Как я могу отобразить исходную легенду?

    ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
    ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend

    ComboBox1.Items.Add("FirstItem")
    ComboBox1.Items.Add("SecondItem")
    ComboBox1.Items.Add("ThirdItem")

    ComboBox1.SelectedText = "Select Item"

С этим кодом ComboBox отображается без текста. Если я удаляю предложение ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList, то отображается текст в ComboBox1.SelectedText = "Select Item", но пользователь может ввести в поле со списком другие значения, которые не соответствуют listItems.

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Действительно, весьма прискорбно, что вы все еще застряли с Windows XP. Реальная реализация Windows (доступная только в Vista и более поздних версиях) действительно довольно удобна. Я не совсем уверен, что рекомендовать в этом случае. На самом деле я уже рассматривал ту же самую проблему раньше, и просто нет способа заставить нативную реализацию Windows работать с комбинированным списком с набором стилей DropDownList.

Если вы настроены на получение этой функциональности в Windows XP, то вам придется написать свою собственную реализацию в коде, что гарантированно будет ужасно, извините. Как вы обнаружили, свойство SelectedText не влияет на комбинированный список с набором стилей DropDownList. Вам нужно будет добавить элемент со значением «Выбрать элемент», убедиться, что он выбран по умолчанию, а затем удалить этот элемент из списка после того, как пользователь сделает свой первый выбор.

Возможно, я бы порекомендовал вам использовать встроенную поддержку баннеров-подсказок там, где она доступна (когда приложение работает в Vista или более поздней версии), и прибегать к пользовательской реализации только тогда, когда это абсолютно необходимо (в XP) .

Но если бы это был я, я бы решил эту проблему и использовал бы другой подход. Вот пара идей:

  • Подход бедняка, использованный задолго до того, как были изобретены эти новомодные «баннеры-подсказки», заключается в простом размещении элемента управления Label рядом с выпадающим списком. В этой метке вы можете отобразить любой необходимый текст инструкции. Это может быть не так гладко или элегантно, но так же функционально.

  • Просто установите pre-select значение по умолчанию, которое пользователь, скорее всего, выберет в большинстве случаев. Хитрость с комбинированным списком, установленным как DropDownList, заключается в том, что после выбора одного из элементов в списке пользователь не сможет отменить выбор . То есть они не могут очистить существующий выбор, не выбрав новый элемент из списка. (Конечно, вы можете сделать это программно, но это не имеет значения в этом случае.) Поэтому, если вы предварительно выберете значение по умолчанию, будет очевидно, что они должны делать (выберите один), и они никогда не смогут отмените выбор там, где он снова неочевиден.

    Я думаю, что почти во всех случаях есть разумное значение по умолчанию. Но даже там, где их нет (скажем, «Выберите свой пол: мужской / женский»), вы можете просто выбрать один или другой в качестве значения по умолчанию, и пользователи будут достаточно сообразительны, чтобы изменить его, если он неправильный для них. Вот как я делаю это во всех моих приложениях.

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

    myComboBox.SelectedIndex = 0
    
0 голосов
/ 30 июля 2013

Я знаю, что этому вопросу пару лет и у него есть ответ, но у меня были те же требования и я нашел другое решение.Я подумала, что должна дать ссылку на свое решение на случай, если кто-нибудь еще столкнется с этим.Это позволяет вам добавить баннер cue в поля со списком «только для чтения» в XP.В комбинированных полях используется стиль по умолчанию (который не только для чтения), но вы можете сделать некоторые вещи в коде и дизайнере, чтобы они работали как «только для чтения» и при этом сохраняли свой баннер метки.Подробности смотрите здесь: https://stackoverflow.com/a/17869453/2340643

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...