2014-02-27 49 views
2

反正有沒有辦法阻止winforms組合框中的選定項目在設置時自動突出顯示? (通過組合框屬性SelectedIndex或SelectedItem)。C#在WinForms組合框中突出顯示的文本

會發生什麼是我們用一組項目填充組合框,然後設置我們想要在組合中顯示的項目的索引,但這會導致文本突出顯示。當禁用組合框時,這意味着很難閱讀文本,因爲高亮顏色是藍色,文本顏色是白色。看起來這種行爲是通過設計的,但它非常煩人!

我在網上找到的唯一解決方案,並嘗試哪些作品是繼承組合框的控件,但這太侵入了,意味着我們將不得不替換我們的應用程序中的所有組合框來解決此問題。我也嘗試在父控件加載後將組合框上的SelectionLength屬性設置爲0,並嘗試在組合框上調用Select(0,0),但都沒有達到所需的效果。

任何想法?

感謝

+1

類似的問題在這裏:http://stackoverflow.com/questions/786119/editbox-portion-of-combobox-gets-selected-automatically – CJBS

回答

0

這將工作

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    // Draw the background. 
    e.DrawBackground(); 
    // Determine the forecolor based on whether or not 
    // the item is selected. 
    Brush brush; 
    // Get the item text. 
    string text = ((ComboBox)sender).Items[e.Index].ToString(); 
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
    { 
    brush = Brushes.White; 
    } 
    // Draw the text. 
    e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y); 
} 
+0

感謝。我會試一試,讓你知道它是否能解決問題。 – user3359423

1

這似乎是在本地Windows執行ComboBoxDropDownDropDownStyle的錯誤。

我認爲最好的解決辦法是處理ComboBoxResize事件,將SelectionLength屬性設置爲0(零)。該解決方案的詳細解答這個問題:

Editbox portion of ComboBox gets selected automatically

然而,我發現,即使是hackish的補丁來解決這個bug並不總是奏效。如果ComboBoxTableLayoutPanel中,並且該TableLayoutPanel具有多個具有Percent大小類型的列,則該修復通常不起作用。

一張圖片勝過千言萬語。請參閱我爲演示問題所做的表單的以下屏幕截圖。

enter image description here

+1

我一直在爲此奮鬥了幾個月,您的解決方案是第一個工作。我將ComboBox擴展到一個繼承的類中,並在'MyBase.OnResize(e)'之後立即覆蓋'OnResize(e As EventArgs)'sub並將'SelectionLength = 0'。非常感謝! – VBobCat