.net - 在VB.net中将值从子级传递给mdi父级

标签 .net vb.net mdi

我有一本简单的通讯录。该应用程序有一个主窗口,它是一个 mdi 形式。当使用“添加联系人”表单添加联系人时,我想在父窗口状态栏中显示一条简单的反馈消息,说明该联系人已成功添加。

这是子加载:

Private Sub addButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addButton.Click
    Dim af As New addForm
    af.MdiParent = Me
    af.Show()
End Sub

问题在于,由于父级实际上是 mdi 父级,并且“添加联系人”表单是使用 .Show() 启动的。而不是 .ShowDialog() ,我无法存储任何可被启动 Sub 用来执行操作的返回值。

有没有办法将值从这个 child 传递给 mdi parent ?这是执行此操作的子表单:
Private Sub addButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addButton.Click

    Dim contact = <contact>
                      <quickName><%= quickNameTextBox.Text %></quickName>
                      <firstName><%= firstNameTextBox.Text %></firstName>
                      <lastName><%= lastNameTextBox.Text %></lastName>
                      <email><%= emailTextBox.Text %></email>
                      <website><%= websiteTextBox.Text %></website>
                      <telephone><%= telephoneTextBox.Text %></telephone>
                      <mobile><%= mobileTextBox.Text %></mobile>
                  </contact>

    Dim contactList = XDocument.Load("contactList.xml")

    contactList.Elements()(0).Add(contact)
    contactList.Save("contactList.xml")
    //something here to trigger the status update in the parent?
    //trivia: SO doesn't support VB single-quote comments...
    Me.Close()

End Sub

附言显然,我不太擅长标记事物......所以任何想要重新标记这个问题的人都是最受欢迎的。

最佳答案

我处理这个问题的方法是在子控件上创建一个自定义事件。然后处理父控件上的事件。

首先,在子控件中定义事件(例如,定义自己的):

Public Event EVENTNAME(ByVal sender as Object, ByVal ValueToReturn As String)

然后,当您的数据准备好传递时,在子控件上引发事件。
RaiseEvent EVENTNAME(Me, txtBoxWithReturnValue.Text)

完成后,现在在父窗体上,您可以处理自定义事件。为此,您需要添加一个监听器,以在事件触发时“监听”该事件:
AddHandler CONTROLNAME.EVENTNAME, AddressOf EVENTNAME

然后,您可以编写一个例程来处理父窗体中的这个新事件:
Private Sub FUNCTIONAME(ByVal sender As System.Object, ByVal ValueToReturn as String) Handles CONTROLNAME.EVENTNAME

'Code to handle data here

End Sub

关于.net - 在VB.net中将值从子级传递给mdi父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565423/

相关文章:

负载均衡系统的ASP.NET缓存解决方案

mysql - 无法在vb数据源中添加mysql数据库表

wpf - 如何在 WPF 应用程序中实现 mdi

c# - C# Parent 和 Child 中的 MDI 窗体

delphi - DUnit 无法创建表单。当前没有处于事件状态的 MDI 表单

c# - 使用 yield 如何节省时间或内存?

c# - CA1009 : Declare event handlers correctly?

.net - 如何从进程名称中获取应用程序名称?

javascript - asp.net - 多个选择框选择+数量设计建议

c# - 如何避免堆栈溢出?