2

次のような「詳細」モードのリストビューがあります。

#################
Name  #  Property
#################
#Itm1 # Subitm1
#Itm2 # Subitm2
#################

非常に単純ですが、私が実行している問題は、実行時にリストで「Subitm1」を選択できないことです。最初の列のすべての項目を選択して強調表示できますが、2 番目の列の項目をクリックしても何も起こりません (最初の列のように項目が強調表示されると思います)。

具体的には、ユーザーがサブアイテムをダブルクリックして、リストビューでその値を直接変更できる機能を追加しようとしています。ここに欠けている特定の設定はありますか?

4

1 に答える 1

8

サブアイテムがクリックされたときに行全体を選択したい場合は、FullRowSelectのプロパティを使用してみてくださいListView。サブアイテムのダブルクリックを処理するには、これを試してください:

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    ListViewHitTestInfo hit = listView1.HitTest(e.Location);
    // Use hit.Item
    // Use hit.SubItem
}

エンドユーザーがリストビューでサブアイテムのテキストを編集できるようにしたい場合、グリッド コントロールを使用するのが最も簡単な方法だと思います。別の方法は、次のようなものを試すことです。

private readonly TextBox txt = new TextBox { BorderStyle = BorderStyle.FixedSingle, Visible = false };

public Form1()
{
    InitializeComponent();
    listView1.Controls.Add(txt);
    listView1.FullRowSelect = true;
    txt.Leave += (o, e) => txt.Visible = false;
}

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    ListViewHitTestInfo hit = listView1.HitTest(e.Location);

    Rectangle rowBounds = hit.SubItem.Bounds;
    Rectangle labelBounds = hit.Item.GetBounds(ItemBoundsPortion.Label);
    int leftMargin = labelBounds.Left - 1;
    txt.Bounds = new Rectangle(rowBounds.Left + leftMargin, rowBounds.Top, rowBounds.Width - leftMargin - 1, rowBounds.Height);
    txt.Text = hit.SubItem.Text;
    txt.SelectAll();
    txt.Visible = true;
    txt.Focus();
}
于 2014-02-23T02:07:23.540 に答える