我正在寻找构建一个具有正常着色的 Windows 窗体组合框,并允许出现下拉列表,但不允许实际更改值。据我所知,这不是 How to make Combobox in winforms readonly 的副本因为那里的所有建议似乎都是针对禁用组合框的交互性的。
我的理由:我有一个所有控件都是只读的表单,并且由于应用程序的性质,我认为当组合框的值不变时,用户不会感到困惑。我希望用户能够看到组合框绑定(bind)到的枚举的所有可能值。
到目前为止,我有一个非常糟糕的 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”值,并获取从绑定(bind)源获取的第一个非零值。直接的缺点是该值只能设置一次,并且绑定(bind)的枚举必须从 1 开始。
欢迎任何有关清理此问题的建议。谢谢。
最佳答案
使用 DropDownClosed 事件
public class ReadOnlyComboBox : ComboBox
{
bool afterDropDown ;
int prevIndex;
public ReadOnlyComboBox()
{
this.SelectedIndexChanged+=new EventHandler(ReadOnlyComboBox_SelectedIndexChanged);
this.DropDownClosed += new EventHandler(ReadOnlyComboBox_DropDownClosed);
}
void ReadOnlyComboBox_DropDownClosed(object sender, EventArgs e)
{
afterDropDown = true;
}
private void ReadOnlyComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (afterDropDown)
{
afterDropDown = false;
SelectedIndex = prevIndex;
}
else
{
prevIndex = SelectedIndex;
}
}
}
关于.net - 只读(但可删除)组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451420/