我有一个包含DropDown组合框的winform,用户可以在其中输入购买日期。
组合框中的项目是“选择日期”,它会显示一个日历,以便用户可以选择日期,“今天”和“上周”。如果用户选择“今天”或“上周”,我想将下拉控件的文本值设置为该日期字符串。我试图在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");
}
答案 0 :(得分:4)
在ComboBox的可编辑部分中选择的SelectedText
属性文本。 MSDN states:
然而,如果你试图得到
SelectedText
中的SelectedIndexChanged
值SelectedValueChanged
或SelectedText
事件处理程序, 该属性返回一个空字符串。 这是因为,在这些时候 事件,前一个SelectedIndexChanged
价值已被清除,新的 价值尚未确定。至 检索a中的当前值SelectedValueChanged
或SelectedItem
事件处理程序, 请改用SelectedText
属性。
由于SelectedItem
属性与BeginInvoke
属性紧密相关,因此更改所选文本可能会导致所选索引发生更改。正如您所观察到的,这可能导致重新入侵问题,这些问题可能会阻止一个或两个操作成功完成。在这种情况下,诀窍是延迟更新,直到当前事件完成。在WinForms中,这可以使用Dispatcher
方法和将执行延迟工作的适当委托来完成(在WPF应用程序中,这是使用当前控件的{{1}}执行的。)
您可能需要考虑使用与此任务的组合下拉菜单不同的控件,因为您的用例并不真正符合从列表中选择的想法。听起来你真正需要的是更像菜单和文本显示。