.net 在调用方法时捕获?
(首先很抱歉,因为我不知道如何正确命名这个问题。) 当我从GUI中的按钮调用此命令时,我需要执行某种操作:.net 在调用方法时捕获?,.net,vb.net,winforms,methods,delegates,.net,Vb.net,Winforms,Methods,Delegates,(首先很抱歉,因为我不知道如何正确命名这个问题。) 当我从GUI中的按钮调用此命令时,我需要执行某种操作: Listview1.Items.Add(LVItem) 问题是,我需要从其他类执行此操作,我的意思是不继承ListView来引发自己的ItemIsAdded事件等 那么这可能吗 我将举一个例子来更好地了解我: 我有Form1课程: Public Class Form1 Public WithEvents _undoManager As UndoManager Private Sub
Listview1.Items.Add(LVItem)
问题是,我需要从其他类执行此操作,我的意思是不继承ListView来引发自己的ItemIsAdded
事件等
那么这可能吗
我将举一个例子来更好地了解我:
我有Form1
课程:
Public Class Form1
Public WithEvents _undoManager As UndoManager
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
_undoManager = New UndoManager(Listview1)
End Sub
Private Sub Button_AddItem_Click(sender As Object, e As EventArgs) _
Handles Button_AddItem.Click
Listview1.Items.Add(LVItem)
End Sub
End Class
和UndoManager
类:
Public Class UndoManager
Delegate Sub AddDelegate(item As ListViewItem)
Private Shared LV As ListView
Private Shared ListView_Add_Method = New AddDelegate(AddressOf LV.Items.Add)
Public Sub New(ByVal ListView As ListView)
LV = ListView
End Sub
' Here code to capture when the delegate method is called...
private sub blahblahblah() handles ListView_Add_Method.IsCalled
' blah blah blah
end sub
End Class
然后,当我调用
Form1
类中的Listview1.Items.Add(LVItem)
以执行某种操作,然后添加项时,UndoManager
类需要捕获(如果调用Items.Add()
方法之前或之后运行该操作,则实际上没有数学).您已经有了一个ItemAdded
事件-您缺少的是Undo Manager监视这些事件的方法。一种方法是在类中添加一个hander,该类将监视该事件。例如,对于文本观察者:
Friend Overrides Function Watcher(ByVal ctl As Control) As Boolean
' can also be ComboBox, DateTimePicker etc
If TypeOf Ctl is TextBox Then
AddHandler ctl.Enter, AddressOf _Enter
AddHandler ctl.Leave, AddressOf _Leave
Return True
Case Else
Return False
End Select
End Function
_enter获取BeforeText\u leave将其与现在的文本进行比较。如果有更改,则开始执行撤消操作。在您的情况下,只需监视ctl.ItemAdded和ctl.ItemRemoved即可生成事件(无需比较)。只要稍微聪明一点,您就应该能够根据正在观看的事件轻松创建项、标记和检查撤消操作
观察者(其他UndoManager称之为监视器
)是创建撤消操作的观察者:
Private Sub _Leave(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim NewText As String = CType(sender, Control).Text
If _Text <> NewText Then
MyBase.OnNewAction(sender, _
New AddActionArgs(UndoManager.UnDoReDo.UnDo, _
New TextUndo(sender, _Text)))
End If
End Sub
Private Sub\u Leave(ByVal sender作为System.Object,ByVal e作为System.EventArgs)
Dim NewText As String=CType(发送方,控件)。文本
如果_textnewtext那么
MyBase.OnNewAction(发送方,\u
新的AddActionArgs(UndoManager.UnDoReDo.UnDo_
新文本撤消(发送方,_Text)))
如果结束
端接头
最简单的方法可能是每次添加项目时在undomanager中专门触发事件。让它自动发生可能意味着创建您自己的继承类并添加您想要的功能。