2016-07-23 52 views
0

我有TextBoxLeave事件。
TextBox.Leave子,我想显示一个确认MSGBOX询问用户保存更改,但是,如果我表现出MsgBox,则不触发Button.Click事件(TextBox.Leave事件后:看到我刚才的问题Here赶上控制(按钮点击)谁提出了离开事件的文本框

所以我想插入(在TextBox.Leave子)一个代码来捕获按钮的名称(或另一个rif)被点击并触发了TextBox.Leave事件。

有按钮的名称,我就可以提高点击事件:

DirectCast(Me.Controls("ButtonName"), Button).PerformClick() 

回答

1

而不是调用事件,你可以使用的方法来组织代码更好。以这种方式调用代码的问题之一是,迟早你会想知道它是如何被用户或代码调用的。

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 
    ' arguably, if the user clicks a save button, 
    ' you dont ask them 
    SaveMyStuff() 
End Sub 

Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave 
    If QueryUserSave("Customer") Then 
     SaveMyStuff() 
    End If 
End Sub 
Private Function QueryUserSave(whereMsg As String) As Boolean 
    Dim dlgR As DialogResult 
    Dim msg = String.Format("Some stuff has changed in {0}. Save it now?", whereMsg) 

    dlgR = MessageBox.Show(msg, "Sorry to bother you...", MessageBoxButtons.YesNo) 

    Return dlgR = Windows.Forms.DialogResult.Yes 
End Function 

Private Sub SaveMyStuff() 
    '... 
End Sub 

如果你写一个做一个单一的东西的方法(包括事件),就可以一起从其他方法将它们链接到一遍又一遍地重复使用。

+0

您的解决方案总是更好:) – genespos

0
Dim CtrlName As String = Me.ActiveControl.Name