【发布时间】: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 时,我向带有文本框名称的子项添加了一个标签。现在我要做的就是获取该名称,在列表中找到它并从那里启用/禁用它。