2011-10-20 350 views
7

我在WinForm中使用組合框,但是當我選中組合框中的任何項目時,選定的項目背景顏色爲藍色。我想刪除這個藍色的背景顏色(特別是在表單加載時,試圖將焦點設置到窗體中的其他控件,但組合高亮顯示不被刪除),但是應該選擇項目。在ComboBox中停止選定項目的顏色高亮?

有人可以幫忙嗎?

+0

敢肯定你可以選擇的指數正好被設置爲-1,但它一直一會兒。 – asawyer

+1

,但應選擇項目... – Dhana

+0

你在窗口上使用特殊的顏色主題?這不應該發生在一個共同的組合上。嘗試刪除該組合並添加一個新組合。 @asawyer,將清除組合,但這不是OP所要求的;) – gbianchi

回答

2

我發現了一些在this site

創建一個定時器並在SelectedIndexChanged事件啓用它,並且在計時器只添加ComboBox1.Select(0,0)這應該取消選擇部分,然後關閉計時器。找出其他的切入點在哪裏,你可以Enable計時器再次

代碼片斷

private void comboBox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    //Get the item selected in the combobox 
    ComboBox cbx = (ComboBox)sender; 
    int idx = cbx.SelectedIndex;  
    string s1 = cbx.SelectedItem.ToString(); 
    // Enable the time so that the Highlight can be removed 
    timer1.Enabled = true; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Remove the Highlight 
    comboBox1.Select(0, 0); 
    // Disable timer 
    timer1.Enabled = false; 
} 
+0

comboBox1.Select(0,0) - 由於combobox是'dropdownlist'而不起作用,所以不允許編輯文本.., – Dhana

+0

@Dhana然後設置'comboBox1.SelectionLength = 0'工作嗎? – V4Vendetta

1

有你

private void myComboBox_Paint(object sender, PaintEventArgs e) 
{ 
    myComboBoxComboBox.SelectionLength = 0; 
} 

一個簡單的解決方案希望它能幫助:)

+0

會不會取消選擇? – elyashiv

2

我不是一個大的VB用戶,只能在Excel中使用它,但在我的ComboBox中進行選擇時也遇到了這個問題。我終於找到了擺脫藍色文本突出顯示的方法。

我在用戶窗體上有一個組合框。通過選擇組合框並查看屬性,只需將「HideSelection」更改爲True即可。你也可以爲它的代碼: ComboBox1.HideSelection =真

+0

這是正確的解決方案。儘管你的答案是關於VBA的,但對於使用C#和VB.NET的WinForms也是一樣的。您需要將「HideSelection」屬性設置爲「true」。奇怪,雖然;這應該是默認設置。 –

+0

@Cody Gray - 我無法在Windows窗體中找到ComboBox的HideSelection屬性。它存在於TextBoxBase和從它繼承的控件,但ComboBox不。這是一種恥辱,因爲我真的很喜歡它! (我正在使用Visual Studio 2013與.NET 4.5) – JonP

+0

@jonp嗯,我不知道我幾年前寫評論時的想法。據推測,它當時對我有效。我想也許ComboBox只是隱藏了基類方法,但是快速查看Reference Source表明它甚至沒有與TextBox相同的層次結構。它實際上是從繼承自Control的ListControl繼承而來的。所以沒有隱藏的屬性設置。也許你可以得到底層的TextBox控件,儘管.NET沒有提供任何管理方式。你將不得不使用P/Invoke來獲取句柄。 ... –

2

爲了解決我已經試過幾乎所有的東西是一樣的:

  • 設置DropdownStyle屬性DROPDOWNLIST
  • this.BeginInvoke(new Action(() => { comboBox1.Select(0, 0); }));
  • combobox1.SelectionLength = 0;
  • 改變comboBox.TabIndex
  • 未嘗試SendKeys.Send("{ESC}");因爲它不是重新承擔責任的解決方案

沒有什麼幫助。也許是因爲我的組合框內沒有文字,只有圖像。 唯一的穩定和工作的解決辦法是在另一個Label控件移動焦點:

label.Focus(); 

你也可以隱藏標籤。

0

我遇到了同樣的問題,在找不到工作解決方案後,我的想法與@Vadim K相同

這是一個簡短的例子。

第一步是改變UI_Load事件中的焦點。

Private Sub UI_Load(sender As System.Object, e As System.EventArgs) Handles Me.Load  
    Me.lblTitle.Focus() 
End Sub 

下一步要處理的情況下,當有人選擇一個新的值

Private Sub comboExportDates_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboExportDates.SelectedIndexChanged 
     Me.lblTitle.Focus() 
End Sub 

工作正常,我