从子窗体VB.Net中的子窗体移动父窗体

时间:2013-09-08 13:18:51

标签: vb.net forms

我在子表单中有一个sub,它会重置我的应用程序的设置。其中一个是我父表单的起始位置。我希望reset_click事件更新父表单位置。部分原因是由于父母关闭事件存储了表单的最后位置,因此我需要在关闭之前移动它。

儿童表格代码:

Public Sub Reset_Click(sender As System.Object, e As System.EventArgs) Handles Reset.Click

    My.Settings.Reset()
    My.Settings.Save()

    TextBox2.Text = My.Settings.FilePath
    TextBox1.Text = My.Settings.VerticalExaggeration

    Dim frm As New Global.JJsGEControlPanel.Form1()
    frm.MoveFrm()

End Sub

父母的MoveForm Sub:

Public Sub MoveFrm()
    Me.Location = My.Settings.MainFormLocation
    Me.Refresh()

End Sub

如果从父表单中执行,MoveFrm子工作,但是如果从子点击事件执行,则不会工作?我很难过!

1 个答案:

答案 0 :(得分:1)

此行创建第​​一个表单的新实例。从未显示的实例。该命令由此隐藏实例执行,因此您不会看到原始表单移动到任何位置。

Dim frm As New Global.JJsGEControlPanel.Form1()
frm.MoveFrm()

解决问题的最简单方法是将Form1的原始实例传递给子窗体,保存此传递的实例,然后在需要移动原始窗体时使用它

在Form1中(当您创建子表单的实例时),您可以编写

Dim child = new frmChild(Me)

在您的子表单构造函数

Private callerForm as Global.JJsGEControlPanel.Form1
Public Sub New(ByVal callerInstance as Global.JJsGEControlPanel.Form1)
   callerForm = callerInstance
   InitializeComponent()
End sub

最后当你需要移动主表单时

callerForm.MoveFrm()