Редактирование WinForms ListViewItem программно - PullRequest
0 голосов
/ 08 июля 2019

У меня есть System.Windows.Forms.ListView объявленный private System.Windows.Forms.ListView listViewContent в классе дизайнера.

Я пытаюсь изменить некоторые свойства из ListViewItem:

  • ListViewItem.Text
  • ListViewItem.Tooltip

Элемент, который я пытаюсь отредактировать, является частью ListViewItemCollection (ListView.Items).

Вот моя первая попытка изменить эти свойства:

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

Значения Text и 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 находится в определенном состоянии (Virtual ListView), что не позволяет мне изменять его элементы .

Но тогда почему ListViewItem.BeginEdit() может редактировать свойство Text элемента?
Я знаю, что для ListViewItem.BeginEdit() требуется установить listViewContent.LabelEdit на true (я пытался установить для этого свойства значение true в моем первом и втором подходе, но это не имело никакого эффекта).

Мой вопрос:
Я что-то упустил в процессе редактирования свойства ListViewItem?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...