2011-12-12 230 views
0

我有一个组合框,它打开一个带有datagridview的新窗体窗口,我希望用户通过datagridview而不是通过组合框选择项目。我有了这个代码,以实现这一目标:Combobox取消下拉菜单

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

你能不能ComboBox的'Enabled'属性设置为false? – Otiel

回答

2

您应该能够简单地将ComboBox的高度设置为非常小的值。上次我查看它时,这确定了弹出部分的高度(控件的实际高度由UI /字体大小决定)。

然而,更优雅的方式是使用一个自定义控件,它只是模仿下拉框的外观(我相当确定可以通过一些简单的方法)。

+0

+1用于使用不同的控件。 Combobox在这里显然不是正确的解决方案。带有按钮旁边的按钮的标签包装在用户控件中会更好。 –

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; 
     } 
    } 
0

1)从属性创建ComboBox上的KeyPress事件。 2)写代码

private void cmbClientId_KeyPress(object sender, KeyPressEventArgs e) { ((ComboBox)sender).DroppedDown = false; }