我有一个组合框打开一个带有datagridview的新表单窗口,我希望用户通过该datagridview而不是通过组合框选择项目。我已经有了这个代码来实现这个目标:
private void comboBox1_DropDown(object sender, EventArgs e)
{
valSel.incBox = (ComboBox)sender;
valSel.Show();
if (this.comboBox1.DroppedDown)
{
MessageBox.Show("test");
SendMessage(this.comboBox1.Handle, CB_SHOWDROPDOWN, 0, 0);
}
}
如你所见,我也试图隐藏组合框的下拉列表,但它无法正常工作。我认为这是因为组合框实际上还没有“下降”,因此部分代码永远不会运行。 当组合框完全“掉落”时,是否有一个事件或其他东西可以单元格,所以我可以发送消息再次关闭它?
答案 0 :(得分:2)
您应该能够将ComboBox
的高度设置为非常小的东西。上次我查看它时,确定了弹出窗口部分的高度(控件的实际高度由UI /字体大小决定)。
然而,更优雅的方式是使用仅模仿下拉框外观的自定义控件(我相当肯定可以通过一些简单的方式完成)。
答案 1 :(得分:0)
在comboBox1.Enter中,如果满足条件,则将焦点设置为不同的控件。
private void comboBox1_Enter(object sender, EventArgs e)
{
if (comboBox1.Items.Count < 1)
{
comboBox1.DroppedDown = false;
comboBox2.Focus();
MessageBox.Show("Select a list first");
comboBox2.DroppedDown = true;
}
}
答案 2 :(得分:0)
1)从属性在ComboBox上创建一个KeyPress事件。 2)编写代码
private void cmbClientId_KeyPress(object sender, KeyPressEventArgs e)
{
((ComboBox)sender).DroppedDown = false;
}