2011-12-12 215 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; }