【发布时间】:2011-07-24 00:17:30
【问题描述】:
我希望构建一个具有正常颜色的 Windows 窗体组合框,并允许出现下拉列表,但不允许实际更改值。据我所知,这不是 How to make Combobox in winforms readonly 的重复,因为那里的所有建议似乎都是针对禁用组合框的交互性。
我的理由:我有一个表单,其中所有控件都是只读的,并且由于应用程序的性质,我认为当组合框的值不变时,用户不会感到困惑。我希望用户能够看到组合框所绑定的枚举的所有可能值。
到目前为止,我有一个非常糟糕的 hack:
public partial class ReadOnlyComboBox : ComboBox
{
int prevIndex = -1;
public ReadOnlyComboBox()
{
InitializeComponent();
}
private void ReadOnlyComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (prevIndex <= 0)
prevIndex = SelectedIndex;
else
SelectedIndex = prevIndex;
}
}
实际上,这会忽略框架中的虚假“0”值,并获取从绑定源获取的第一个非零值。直接的缺点是该值只能设置一次,并且绑定的枚举必须从 1 开始。
欢迎提供有关清理此问题的任何建议。谢谢。
【问题讨论】:
-
明确地说,“DropDownStyle”属性设置为“DropDownList”的普通组合框不是您想要的,对吗?
-
其实我还想要 DropDownList 除了上面的。
-
好的,所以 DropDownList 显示了不可编辑的项目。为了防止更改,它最初是如何填充的......来自另一个进程,例如更新状态/正在进行的工作?或者,您是否希望用户能够在第一次创建记录时进行编辑,并防止用户在设置初始创建值后进行更改。
-
用户永远不能编辑数据。该列表由 BindingSource 填充。
标签: .net winforms combobox readonly