2011-10-27 26 views
15

我有一個氪組合框,其中的數據與鍵值對列表綁定。發生的事情是,當我在代碼中設置所選項目時,突出顯示文本。我如何防止或取消選擇文本?如何取消選擇組合框的文本

我已經試過如下:

// 1 
combo.Select(0,0); 
// 2 
combo.Focus(); 
anotherControl.Focus(); 
// 3 
combo.SelectionStart = 0; 
combo.SelectionLength = combo.Text.Length; 
// 4 
combo.SelectionStart = combo.Text.Length; 
combo.SelectionLength = 0; 

似乎沒有任何工作。任何幫助表示讚賞。

回答

2

嘗試了這一點

combo.SelectedText = String.Empty; 

關於你的問題的重點:(MSDN

當組合框失去焦點,選擇點移動到 開始的文本和任何選定的文字變爲未選中

很奇怪;爲什麼下面沒有工作:

anotherControl.Focus(); 
+1

謝謝,但沒有奏效 – MattBH

+0

它的怪異當我後其加載點擊它,然後點擊別的東西那麼注重事情的作品!??!它讓我瘋狂 – MattBH

+0

你的組合框綁定到某些數據源嗎?如果是,請嘗試SelectedIndex = -1 – sll

0

不知道你會在後臺即做什麼觸發的事件等。但是在COMBOX SelectedIndexChanged事件,您可以添加anotherControl.Select()。

那應該:)

+0

沒有沒有工作。 – MattBH

0

我知道它已經有一段時間了,因爲你問這個問題。但這裏是你可以做什麼

combo.selectedindex = -1; 
+2

謝謝,但我不想更改選定的項目,我只想取消突出顯示文本。 – MattBH

3

我可能已經找到一個可行的解決方案:

如果您使用的是形式,訂閱窗體的Event。

OR

如果您使用的是用戶控件(像我),你可以訂閱VisibleChanged事件。

在活動現場,你就可以做到以下幾點:

 foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c))) 
     { 
      cbo.SelectionLength = 0; 
     } 

順便說一句:

最後我不得不爲我在其中添加組合框,以控制用戶控件做到這一點,那麼稍後需要動態設置它們的大小。設置大小導致突出顯示OP遇到。

+0

這也適用於我。偉大的 –

0

這裏是我做的:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    this.ActiveControl = cancelButton; 
} 
+0

'this.ActiveControl = null;'也行。 – Alden

0

沒有指定用戶是否應該能夠編輯組合框的值或沒有。如果不是,那麼ComboBox的DropDownStyle應設置爲ComboBoxStyle.DropDownList。這樣ComboBox將只允許選擇現有的值,用戶將無法輸入新的值,文本也不會被突出顯示。

6

我設法完成這一被重寫我的控制/窗口的OnPaint事件,做

combobox1.SelectionLength = 0; 
+0

這樣做,我以後不能突出顯示文字。因爲OnPaint方法經常被調用,所以它每次都被取消選擇 –

0

這3行幫助我:

cbInstallationType.SelectionStart = 0; 
cbInstallationType.SelectionLength = 0; 
cbInstallationType.TabIndex = 99; 

tabIndex已成爲不是第一位的,所以它不是表格中的第一項

+1

我和OP有同樣的問題,這並沒有幫助 –

0

您只需將此代碼放置在生成的事件或按鈕上,單擊要取消選擇組合框文本的地方

ComboBox1.SelectedItem = null; 
+0

耶!好,謝謝@shivam –

-1

我不在乎這是多大年紀。我們正在建立一個知識庫。

我使用D5(可能以前的版本都是一樣的)。你需要使用:

Combobox.SelLength := 0; 

此外,如果這不起作用,這一個做:避免默認風格(csDropDown)。 並將其設置爲:

Combobox.Style := csDropDownList; 

正如Alex建議的那樣。

謝謝。很棒!

+1

對不起,但你在這裏顯示的語法看起來不像C#。 – kayess

+0

D5?你是說德爾福?在[C#]標記的問題中? – jean

0

在我的情況下選擇調整後出現。這解決了這個問題:

textBox.Resize += (sender, args) => 
{ 
    Control c = sender as Control; 
    if (c == null || c.Parent == null) 
     return; 

    c.Focus(); 
    c.Parent.Focus(); 
}; 
0

On事件SelectedIndexChanged添加定時器,它將在10毫秒後執行一次。

new System.Threading.Timer((s) => 
      { 
       comboBox1.Invoke(new Action(() => 
       { 
        comboBox1.Select(0, 0); 
       })); 
      }, null, 10, System.Threading.Timeout.Infinite); 
相關問題