0

昨日、サブアイテムの編集をサポートする新しいリストビューを実装しようとしました。私の解決策は、サブアイテムをダブルクリックしたときにテキストボックスを表示することです。キーコードは次のとおりです。

protected override void OnDoubleClick(EventArgs e)
{
        Point pt = this.PointToClient(Cursor.Position);
        ListViewItem curItem;
        int subItemIndex = GetSubItemAt(pt.X, pt.Y, out curItem);
        DoubleClickEventArgs args = new DoubleClickEventArgs(subItemIndex);
        base.OnDoubleClick(args);

        if (subItemIndex>=0 && !args.Cancel)
        {
            //StartEdit(...);
        }

}

public void EndEdit(bool acceptChanges)
    {
        //validation
        .................
        .................
        AfterSubItemEventArgs e = new AfterSubItemEventArgs(this.SelectedItems[0], m_editSubItemIndex, this.SelectedItems[0].SubItems[m_editSubItemIndex].Text, m_textbox.Text, false);
        OnAfterSubItemEdit(e);
        if (e.Cancel)
        {
            //....
        }
        else
        {
            //set new value
        }
        m_textbox.Visible = false;
        m_editSubItemIndex = -1;
    }

OnAfterSubItemEdit は、ユーザーがいくつかの検証またはその他の操作を実行できるイベントです。このメソッドにチェックを追加します。新しい値が存在する場合、最初にユーザーにメッセージ ボックスを表示し、次にテキスト ボックスを非表示にします。しかし今、問題が発生しました。マウスを動かすと、リストビューの項目が選択できます。この問題を解決する方法がわかりません。方法を見つけるために最善を尽くしましたが、失敗しました。だから、私を助けてください!

4

2 に答える 2

0

問題は、値が存在するかどうかにかかわらず、フォームが依然として DoubleClick イベントを呼び出すことです。コードでベース DoubleClick を呼び出す前に、適切な条件を追加します。つまり、次のようになります。

if(!new value exists)
    base.OnDoubleClick(args);
于 2013-06-13T09:08:16.807 に答える