以编程方式编辑WinForms ListViewItem

时间:2019-07-08 15:39:58

标签: c# winforms listview

我在设计器类中有一个System.Windows.Forms.ListView声明为private System.Windows.Forms.ListView listViewContent

我正在尝试编辑ListViewItem的某些属性

  • ListViewItem.Text
  • ListViewItem.Tooltip

我要编辑的项目是ListViewItemCollectionListView.Items)的一部分。

这是我第一次尝试编辑这些属性:

int index = listViewContent.SelectedIndices[0];
listViewContent.Items[index].Text           = "Toto1";
listViewContent.Items[index].ToolTipText    = "Toto2";

执行下面的代码后,文本和ToolTipText的值保持不变

Before After

由于未修改这些值,因此我怀疑这些属性是只读的,不是:

//
// Summary:
//     Gets or sets the text of the item.
//
// Returns:
//     The text to display for the item. This should not exceed 259 characters.
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Localizable(true)]
[SRCategoryAttribute("CatAppearance")]
public string Text { get; set; }

//
// Summary:
//     Gets or sets the text shown when the mouse pointer rests on the System.Windows.Forms.ListViewItem.
//
// Returns:
//     The text shown when the mouse pointer rests on the System.Windows.Forms.ListViewItem.
[DefaultValue("")]
[SRCategoryAttribute("CatAppearance")]
public string ToolTipText { get; set; }

我也尝试过这种方法:

int index = listViewContent.SelectedIndices[0];
ListViewItem item = listViewContent.Items[index];
item.Text           = "Toto1";
item.ToolTipText    = "Toto2";

使用第二种方法,我可以看到在item 上进行的修改是有效的

Second approach

但是我找不到将这些修改应用于集合中项目的方法。我尝试过:

int index = listViewContent.SelectedIndices[0];
ListViewItem item = listViewContent.Items[index];
item.Text           = "Toto1";
item.ToolTipText    = "Toto2";
listViewContent.Items[index] = item; // <------ What I tried

但是在listViewContent.Items[index] = item;上抛出了异常:

System.InvalidOperationException:Cannot modify the items collection in a virtual ListView.

我的猜测是 ListView处于特定状态(虚拟ListView),这阻止了我修改其项

但是,为什么ListViewItem.BeginEdit()可以编辑项目的Text属性?
我知道ListViewItem.BeginEdit()要求将listViewContent.LabelEdit设置为true(我在第一种和第二种方法中都尝试将此属性设置为true,但没有效果)。

我的问题是:
ListViewItem属性编辑过程中是否缺少某些内容?

0 个答案:

没有答案