c#可编辑列表视图
本文关键字:视图 列表 编辑 | 更新日期: 2023-09-27 18:18:22
昨天我尝试实现一个支持子项编辑的新列表视图,我的解决方案是在双击子项时显示一个文本框。键码如下:
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是一个事件,用户可以做一些验证或其他操作。我在这个方法中添加了一个复选,如果新值存在,我将首先向用户显示一个消息框,然后隐藏文本框。但是现在,问题来了,当我移动鼠标时,列表视图项目可以被选中,我不知道如何解决这个问题,我尽了最大的努力去寻找方法,但是失败了。所以,请帮帮我吧!
Listview有一个LabelEdit属性;当你把它设置为"true",那么在一个事件处理程序中,你可以调用Listview.Items[x]. beginedit(),并编辑一个项目。例如,你可以处理ListView。双击事件并调用BeginEdit:
private void Form1_Load(object sender, System.EventArgs e)
{
listView1.LabelEdit = true;
}
private void listView1_DoubleClick(object sender, System.EventArgs e)
{
if(this.listView1.SelectedItems.Count==1)
{
this.listView1.SelectedItems[0].BeginEdit();
}
}
问题是无论值是否存在,您的表单仍然调用DoubleClick事件。在代码中调用base DoubleClick之前添加适当的条件,即:
if(!new value exists)
base.OnDoubleClick(args);