gpt4 book ai didi

c# - 在 ListView 中选择子项并更改值

转载 作者:行者123 更新时间:2023-11-30 20:00:12 26 4
gpt4 key购买 nike

我有一个“详细信息”模式的 ListView ,看起来像这样:

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

很简单,但我遇到的问题是我无法在运行时在列表中选择“Subitm1”。我可以选择并突出显示第一列中的每个项目,但单击第二列中的任何项目都不会执行任何操作(我希望它像第一列中那样突出显示该项目)。

具体来说,我正在尝试为用户添加能够双击子项并直接在 ListView 中更改其值的功能。我在这里缺少特定的设置吗?

最佳答案

如果您想在点击子项时选择整行,请尝试使用 ListViewFullRowSelect 属性。要处理双击子项,请尝试以下操作:

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

如果你想让最终用户在 ListView 中编辑子项的文本,恐怕最简单的方法是使用网格控件。另一种方法是尝试这样的事情:

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();
}

关于c# - 在 ListView 中选择子项并更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com