2011-09-14 67 views
5

我想要禁用選擇文本並在文本框中的文本中間單擊,但用戶必須能夠輸入此文本框並在早期文本的末尾寫入,所以我不能使其成爲ReadOnlyEnable = false如何禁用文本框的選擇

我試圖處理MouseDown並執行以下操作:

input.Select(input.Text.Length, 0); 

它有助於將光標放置在文字中間,但用戶仍可以從最終的選擇。

我也在MouseDown事件上做了MessageBox()事件,但在這種情況下,用戶不能點擊文本框並寫任何東西。

最後一次嘗試是在另一個控件中設置一個focus(),並在一段時間後重新聚焦,但它根本不起作用。用戶仍然可以進行選擇。

我該怎麼辦?

+2

僅附加到第一個文本框的第二個文本框? – LarsTech

回答

2

如果它適合用戶界面/用戶模型,另一種方法是使用兩個文本框:一個只讀用戶可以看到並採取行動的前一個文本(如果這是他需要做的事情)和新文本的可編輯文本以及將新文本提交到只讀文本框(以及持久層)的按鈕。

這種方法不僅可以說是更人性化—的編輯框是完全可編輯的,而不是僅僅「追加」,當用戶點擊退格—但也需要與框架較少的戰鬥,使箱子做它獲取混亂你需要什麼。

5

這個怎麼樣爲Click事件

編輯:也做同樣DoubleClickMouseLeave涵蓋所有情況。你可以有一個公共的事件處理程序。

private void textBox1_Click(object sender, EventArgs e) 
    { 
     ((TextBox) sender).SelectionLength = 0; 
    } 
+0

差不多。當「MouseUp」選項消失,但用戶仍然可以開始選擇某項內容時(藍色突出顯示) – Pieniadz

+1

將'MouseMove'添加到清除選擇的事件列表 –

1

你不遠了您的MouseDown事件處理程序,但可能還好趕上的MouseUp,因爲這是他們完成選擇,這將觸發事件。

或者,您可以捕獲SelectionChanged事件。

只要把你的:

input.Select(input.Text.Length,0);

任何這些事件處理程序中的代碼。

+2

對於WinForms TextBox,沒有'SelectionChanged'。 –