C# ListView ColumnWidthChanged事件被激发';无缘无故';

C# ListView ColumnWidthChanged事件被激发';无缘无故';,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,对于ColumnWidthChanged事件,我有一个listview和一个事件处理程序,每当用户更改某些内容时,它都会将新的列大小存储在配置文件中 我已经为每个在内部更改列的进程创建了标志,以便只能对用户输入做出反应 但此事件仍会在程序启动时触发(listview中的每列触发一次) 调用堆栈仅显示事件“外部代码”和主“program.cs” 我就是不知道这件事是从哪里触发的。有什么想法吗?您需要将连接ColumnWidthChanged事件的代码放入表单的事件中 实际情况是ListView占用

对于ColumnWidthChanged事件,我有一个listview和一个事件处理程序,每当用户更改某些内容时,它都会将新的列大小存储在配置文件中

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

但此事件仍会在程序启动时触发(listview中的每列触发一次)

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


我就是不知道这件事是从哪里触发的。有什么想法吗?

您需要将连接
ColumnWidthChanged
事件的代码放入表单的事件中

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


至于为什么不在DataGridView上启动,我认为对象的大小就是添加到表单中的大小。它将等待计算每个列的大小,直到DataGridView已经添加到表单中。这是一个有点不直观的行为,但从您看到的结果来看,这似乎就是所发生的情况。

如果打开的窗体是您的主窗体,则它会在启动时计算每列的宽度,以准备显示。我将等待添加事件处理程序,直到加载?事件我不记得在完成渲染后触发的是哪一个。请尝试连接到事件中的ColumnWidthChanged事件。我测试了表单的“load”事件,并在那里添加了listviews事件处理程序。但是listview事件当时根本没有触发。请将其放入显示的事件中。在此之前,将当前代码添加到您的问题中,这样我就可以看到您是如何手动连接到事件的。还包括你的接线方法。这是有效的THX!不过,这是一种奇怪的行为。我还有一个相同形式的DataGridView,它也会对列宽的变化做出反应,但启动时不会触发该事件。。。