Combobox取消下拉列表

时间:2011-12-12 19:25:43

标签: c# winforms combobox

我有一个组合框打开一个带有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);
        }
    }

如你所见,我也试图隐藏组合框的下拉列表,但它无法正常工作。我认为这是因为组合框实际上还没有“下降”,因此部分代码永远不会运行。 当组合框完全“掉落”时,是否有一个事件或其他东西可以单元格,所以我可以发送消息再次关闭它?

3 个答案:

答案 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; }