私がしたいのは、ListViewの空の行をダブルクリックして、そこにアイテムを挿入することです。すでにMouseDoubleClickイベント(アイテムの編集用)に応答しており、正常に機能していますが、ListViewItemを含まないListViewの一部でダブルクリックが行われた場合、MouseDoubleClickは起動されないようです。
ダイアログ自体で通常のMouseDoubleClickイベントに応答しようとしましたが、ListViewの「null領域」の1つにある場合、イベントは発生しません。
サブクラス化せずにListViewの「null領域」のクリックに応答する方法はありますか?これを行うには、どのようなイベントを処理する必要がありますか?
ダイアログのダブルクリック(マウスと通常)に対する現在の応答は次のようになります。
if ( RectangleToScreen(list.ClientRectangle).Contains(e.X, e.Y) )
list_MouseDoubleClick(sender, e);
およびlist_MouseDoubleClick()(m_SelItemは現在選択されているアイテムです)
private void list_MouseDoubleClick(object sender, MouseEventArgs e)
{
if ( m_SelItem == null && m_Combo.Items.Count > 0 )
{
m_SelItem = new ListViewItem(new string[] { "", "Rd" });
list.Items.Add(m_SelItem);
}
...
}
編集:その地域全体がイベントのブラックホールにすぎないようです。たとえば、ListViewとDialogの両方で通常のクリック/マウスクリックイベントに応答しようとしました。クリックがListViewItem上にない限り、それらもトリガーされません。唯一の解決策はサブクラス化だと思います。
編集:永続性は報われる!「MouseDown」イベントに次のように応答することで、目的の結果を得ることができます。
private void list_MouseDown(object sender, MouseEventArgs e)
{
if ( e.Clicks == 2 )
list_MouseDoubleClick(sender, e);
}