【问题标题】:How to enable/disable listview subitem editing如何启用/禁用列表视图子项编辑
【发布时间】:2018-07-22 08:43:34
【问题描述】:

我以编程方式创建了一个选中的列表视图,其中一列是可编辑的文本框。我想根据复选框的状态启用或禁用每一行的子项,但找不到访问子项编辑状态的属性或方法。我尝试将子项转换回控件,但效果不佳。

【问题讨论】:

  • 你将不得不覆盖一个文本框来实现这一点。除非您只希望一个列是可编辑的:那么您可以简单地更改列的顺序并在右侧进一步显示项目(即 SubItems [0]).. - 如果您已经这样做了,请使用 LabelEdit 来允许/禁止编辑;或发布您拥有的代码。如果要更改单个行的编辑状态,可以尝试在 selectionchanged 事件中进行更改。或者考虑切换到 DataGridView
  • “覆盖文本框”是什么意思?在我的情况下,实际上只有一列是可编辑的,但 SubItem[X] 没有启用的属性。此外,我尝试创建一个 TextBox 列表,该列表包含对 ListView 中相同控件的引用,以尝试以这种方式影响它,但为了管理它,我需要控件的名称,我也无法获得.
  • 好吧,如果您只需要编辑一个子项,则不需要文本框。您可以尝试使用ItemCheck 事件:yourLV.LabelEdit = !e.CurrentValue.HasFlag(CheckState.Checked); - 请注意,afaik 复选框将始终位于 item1 中。
  • MSDN example相反,当前状态是更改之前的状态,因此!(或参加ItemChecked事件!)-您仍然需要对Selectionindexchanges进行编码:` if ( listView2.SelectedIndices.Count
  • 我尝试实施您的解决方案,但 LabelEdit 没有给我任何结果。我确实设法找到了一个有点丑陋的解决方案。我创建了这些相同文本框的列表,并在将文本框添加到 listviewitem 时,我向带有文本框名称的子项添加了一个标签。现在我要做的就是获取该名称,在列表中找到它并从那里启用/禁用它。

标签: c# listview edit subitem


【解决方案1】:

这是我使用的解决方案。我希望有一个更优雅的: 我创建了一个 TextBoxes 列表,并且在将一个文本框添加到 ListViewItem 时,我还将它添加到列表中。此外,我为每个 ListViewItem 添加了一个带有 TextBox 名称的标签。现在,当我选中或取消选中某一行时,我通过 lstItemList.Items[e.Index].SubItems[3].Tag.ToString() 从标签中获取控件的名称并在列表中搜索它。我更改了定位的 TextBox 的 Enabled 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多