防止由内置函数引发的事件

时间:2017-07-08 15:55:00

标签: vb.net listview event-handling

我将此事件处理程序绑定到listview

ListView1.ColumnWidthChanged

我有这个功能,可以在我的列表中输入数据后立即改变我的列的维度。

ListView1.AutoResizeColumns

我想知道是否有办法暂停VB在自动排序后触发事件?除了人工干预,我的意思是什么?

我虽然设置了一个全局变量,但这需要很多工作并且可能不精确,而且event args参数不包含任何处理鼠标事件的隐式事件,是否有任何方法?

这是我迄今为止尝试过的关于鼠标事件处理的内容:

    Sub listview1mousedown(sender As Object, e As EventArgs) Handles ListView1.MouseMove
        AddHandler ListView1.ColumnWidthChanged, AddressOf resizetable
    End Sub
    Sub listview1mouseup(sender As Object, e As EventArgs) Handles ListView1.MouseLeave
        RemoveHandler ListView1.ColumnWidthChanged, AddressOf resizetable
    End Sub

是否存在关于由其他方式而非鼠标触发的事件的对等解决方案?

1 个答案:

答案 0 :(得分:0)

终于找到了,....

显然设置游标事件捕获并不是在标题级别工作,当鼠标离开子项集合的容器的上限时,该函数不会触发任何事件为此我管理了te set focus事件监听器,将鼠标焦点集中在listview上,这对我来说是足够的用户定义行为:

我设置:

 AddHandler CType(list, ListView).GotFocus, Sub()
                                                AddHandler CType(list, ListView).ColumnWidthChanged, AddressOf resizetable
                                                Debug.Print("handler on")
                                            End Sub
 AddHandler CType(list, ListView).LostFocus,Sub()
                                                RemoveHandler CType(list, ListView).ColumnWidthChanged, AddressOf resizetable
                                                Debug.Print("handler off")
                                            End Sub

然后我在我的Main()写道:

Public Function resizetable( table As listview, e As columnwidthchangedeventargs)
        '... core of the event handler
        Debug.Print("Listview column width changed")
End Function

所以我在调试模式下运行我的应用程序并继续手动调整列大小,然后我在调试控制台中看到了这个:

  

上的

处理程序      

列表视图列宽已更改

     

处理程序关闭

我在main()内运行了这个:

list.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)

我的输出中没有出现!!!!我想我做对了。感谢大家的慎重建议。