ListView ColumnWidthChanged事件被“无理由”触发

时间:2015-06-24 12:44:01

标签: c# winforms visual-studio-2010

我有一个listview和一个ColumnWidthChanged事件的事件处理程序,每次用户更改时都会在配置文件中存储新的列大小。

我为每个在内部更改列的进程创建了标记,以便只能对用户输入作出反应。

此事件仍会在程序启动时触发(列表视图中的每一列都会触发一次)。

调用堆栈仅显示事件,“外部代码”和主“program.cs”。

我无法找到触发事件的位置。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要将代码放在您将ColumnWidthChanged事件连接到表单的Shown事件中。

正在发生的事情是ListView占用了表单上的物理空间,因此在构建时,它必须计算每列的大小。因此,当它将数据填充到它们中时,这些列在获得数据后会调整大小。这就是为什么它在每个列甚至显示之前都会触发一次。

至于为什么它没有在DataGridView上触发,我认为对象的大小是添加到表单的内容。它等待计算每个列的大小,直到DataGridView已添加到表单之后。这有点不直观的行为,但这似乎是你所看到的结果所发生的。