【问题标题】:Any ListView Event which fires on change of Item count?任何在项目计数更改时触发的 ListView 事件?
【发布时间】:2016-05-10 00:33:48
【问题描述】:


当 ListView 中的项目数发生变化时,Win Forms 中是否存在可以触发的事件?
我得到这个链接有点帮助,但我无法理解 C# 中的答案。

Reffered Link

链接中的答案说我猜想制作一些私人功能..
如果有任何可用的事件比制作函数或其他东西更有帮助。
任何帮助都会被广泛接受..

【问题讨论】:

  • 您在哪里添加/删除列表视图的项目?监控那里的项目数量。
  • 通过文本框或/和复选框... @RezaAghaei
  • 将添加/删除的逻辑放在具体的方法中,并在那里编写代码。 (检查项目数量并执行您需要的代码)
  • Through a textbox or/and checkbox 不,这就是用户与您的代码/应用程序交互的方式。在您的代码添加项目的地方,引入一个计数器或其他任何东西。
  • 实际上,我正在通过继承其 windows 属性并更改为我想要在文本框链接中完成的操作来创建列表视图,我将尝试在其中创建方法并稍后通知您... [链接] (stackoverflow.com/questions/16134227/…)

标签: vb.net winforms listview


【解决方案1】:

选项 1

您可以将添加/删除的逻辑放在特定的方法中并在那里编写代码;当项目数量发生变化时要运行的代码。

选项 2

您可以从ListView 继承并覆盖WndProc 并在接收LVM_INSERTITEMLVM_DELETEITEMDELETEALLITEMS 时引发自定义ItemsCountChanged 事件。

Public Class ListViewEx
    Inherits ListView
    Private Const LVM_FIRST As Integer = &H1000
    Private Const LVM_INSERTITEM As Integer = LVM_FIRST + 77
    Private Const LVM_DELETEITEM As Integer = LVM_FIRST + 8
    Private Const DELETEALLITEMS As Integer = LVM_FIRST + 9
    Public Event ItemsCountChanged As EventHandler
    Protected Overridable Sub OnItemsCountChanged(ByVal e As EventArgs)
        RaiseEvent ItemsCountChanged(Me, e)
    End Sub
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
        Select Case m.Msg
            Case LVM_INSERTITEM, LVM_DELETEITEM, DELETEALLITEMS
                OnItemsCountChanged(EventArgs.Empty)
        End Select
    End Sub
End Class

然后您可以订阅该事件并做您需要的:

Private Sub listView1_ItemsCountChanged(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles listView1.ItemsCountChanged

    'Do stuff here
End Sub

注意

  • 您可以增强上述实现,还可以创建ItemInsertedItemDeleted 事件。
  • 您可以从消息中提取更多信息,例如您可以找到插入或删除的项目索引并包含在事件参数中。
  • 对于您不想从ListView 继承的情况,您可以使用NativeWindow 并将现有ListView 传递给本机窗口并将列表视图句柄分配给该窗口来完成相同的工作。李>

【讨论】:

  • 不客气 :) 您可以通过单击答案附近的向上箭头为答案投票,也可以通过单击答案附近的复选标记来接受它。 How does accepting an answer work?
  • 感谢您的反馈 :)
【解决方案2】:

我知道我迟到了,但这是迄今为止最好的解决方案:

Private Sub ListView1_Invalidated(sender As Object, e As EventArgs) Handles ListView1.Invalidated

    nbr.Text = ListView1.Items.Count 'nbr.text is a Label Control

End Sub

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多