私は C# .NET WinForm を持っています。このフォームでは、ユーザーが ListView をダブルクリックして ListView に項目を追加できるようにしています。これにより、TextBox コントロールが ListView に追加され、ユーザーが入力できるようにキー カーソルが TextBox に配置されます。
ユーザーがいくつかの方法 (Enter、Esc、Tab... を押すなど) でアイテムを使用していることを検出しましたが、TextBox を離れる (TextBox.Leave) ときにも検出します。
問題は、この一連の手順です。
- ユーザーは、TextBox の外側でマウス ダウンして TextBox.Leave をトリガーします。
- 新しい項目を ListView に追加します。
- ListView で新しい項目を選択します。
- マウスアップが発生し、選択したばかりの新しいアイテムがフォーカスを失い、選択が解除されます。
私が望むのは、TextBox.Leave が MouseDown ではなく MouseUp によってトリガーされることです。どうすればこれを達成できますか?
編集: Cody は 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() の呼び出しは、ユーザーが新しいアイテムが表示される場所をダブルクリックした場合にのみ機能します。リストビューの他の空白領域をダブルクリックすると、新しいアイテムが追加されますが、編集モードにはなりません。何が起きてる?