C #: установка значения текста ComboBox в обработчике событий SelectedIndexChange? - PullRequest
1 голос
/ 24 февраля 2011

У меня есть winform, содержащий выпадающий список DropDown, где пользователь может ввести дату покупки.

Элементами в выпадающем списке являются «выберите дату», которая вызывает календарь, чтобы пользователь мог выбрать дату, «сегодня» и «последнюю неделю». Если пользователь выбирает «сегодня» или «на прошлой неделе», я хочу установить текстовое значение раскрывающегося элемента управления в эту строку даты. Я пытаюсь сделать это в обработчике SelectedIndexChanged, но не игра в кости. Список DropDown просто показывает пустое поле.

Есть идеи?

private void comboBoxPurchased_SelectedIndexChanged(object sender, EventArgs e)
{
    Types.ComboInfo info = (Types.ComboInfo)comboBoxPurchased.SelectedItem;

    DateTime newDate = stock.PurchaseDate;
    switch ((Types.PurchasedDate)info.id)
    {
      case Types.PurchasedDate.PickCustom:
        //popup a date dialog and let the user choose the date
        PopupCalendar p = new PopupCalendar();
        if (p.ShowDialog() == DialogResult.OK)
          // show date in combobox
          newDate = p.Date;
        break;

      case Types.PurchasedDate.Today:
        newDate = DateTime.Now;
        break;

      case Types.PurchasedDate.WithinLastWeek:
        newDate = DateTime.Now.AddDays(-7);
        break;

      case Types.PurchasedDate.WithinLastMonth:
        newDate = DateTime.Now.AddMonths(-1);
        break;
    }

    // re-create combobox items with new purchase date
    //PopulatePurchaseDateCombo(newDate);
    comboBoxPurchased.SelectedText = date.ToString("MMMM d, yyyy");
    comboBoxPurchased.Text = date.ToString("MMMM d, yyyy");
}

1 Ответ

4 голосов
/ 24 февраля 2011

Текст свойства SelectedText, выбранный в редактируемой части ComboBox. MSDN состояния :

Однако, если вы попытаетесь получить значение SelectedText в обработчике событий SelectedIndexChanged или SelectedValueChanged, свойство вернет пустую строку.Это связано с тем, что во время этих событий предыдущее значение SelectedText было очищено, а новое значение еще не установлено.Чтобы получить текущее значение в обработчике событий SelectedIndexChanged или SelectedValueChanged, используйте вместо него свойство SelectedItem.

Поскольку свойство SelectedText тесно связано со свойством SelectedItem,изменение выбранного текста может привести к изменению выбранного индекса.Это может привести к проблемам с повторным входом, которые могут помешать успешному завершению одной или обеих операций, как вы заметили.В этом случае хитрость заключается в том, чтобы отложить обновление до завершения текущего события.В WinForms это можно сделать с помощью метода BeginInvoke и соответствующего делегата, который будет выполнять отложенную работу (в приложениях WPF это выполняется с использованием Dispatcher текущего элемента управления).

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

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