4

私がしたいのは、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);
}
4

1 に答える 1

3

MouseDownイベントは、私が必要としていたものになりました。

private void list_MouseDown(object sender, MouseEventArgs e)
{
    if ( e.Clicks == 2 )
        list_MouseDoubleClick(sender, e);
}
于 2013-03-22T16:07:45.143 に答える