我有一個C#.NET WinForm。在表單中,我允許用戶通過雙擊ListView將項目添加到ListView。這會將一個TextBox控件添加到ListView中,並將關鍵遊標放置在TextBox中,以便用戶可以輸入。Control.Leave觸發MouseDown,而不是MouseUp
我檢測到用戶已經通過幾種方式(例如按Enter,Esc,Tab ...)完成項目,但是當他們離開(TextBox.Leave)文本框時。
問題是這樣的一個步驟:
- 用戶通過將鼠標向下文本框的外部觸發TextBox.Leave。
- 我將新項目添加到ListView。
- 我在ListView中選擇新項目。
- 發生鼠標擡起,並且我剛選擇的新項目失去焦點並且未被選中。
我想讓TextBox.Leave由MouseUp而不是MouseDown觸發。我怎樣才能做到這一點?
編輯:科迪建議使用ListView.LabelEdit屬性。下面是我的結果是嘗試:
listView_DoubleClick(...) {
listView.LabelEdit = true;
if(double clicked on existing listViewItem) {
listViewItem.BeginEdit(); //this works as expected
} else {
var newItem = listView.Items.Add("");
newItem.BeginEdit(); //this doesn't work, see below
}
}
到newItem.BeginEdit()的調用只能當用戶雙擊其中新項目將出現。如果他們雙擊列表視圖中的任何其他空白區域,則會添加新項目,但不會進入編輯模式。這裏發生了什麼?
這是一個非常*非常*奇怪的方式添加一行到'ListView'控件。爲什麼你需要一個單獨的'TextBox'控件?您是否嘗試將['LabelEdit'屬性](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.listview.labeledit.aspx)設置爲True?或者,我會考慮使用'DataGridView'控件,如果您需要允許用戶在運行時添加項目。 – 2011-03-06 09:16:57
@Cody - 我正在嘗試LabelEdit,但看到奇怪的行爲。查看我的更新。 – Chad 2011-03-06 10:06:50