对话框关闭时,VB.net表单刷新并禁用按钮

时间:2017-12-27 05:32:42

标签: vb.net winforms

我正在开发vb.net应用程序。我有表格并点击发送邮件按钮打开另一个表格,输入邮件详细信息并发送有确认和取消按钮的邮件。

使用以下代码打开form2,

 Private Sub Button1_Click()
    Dim obj As New Form2
    obj.ShowDialog(Me)
End Sub

在form1中有计算按钮,只有当邮件从form2发送时才应该启用。如果用户单击form2上的取消按钮,则计算按钮需要在form1中禁用。哪个没有发生。以下是我的代码,

 Private Sub Button2_Click()
        Dim obj As New Form1()
        obj.initinfo(System.Windows.Forms.DialogResult.Cancel)
        Me.Close()
    End Sub

在下面的form1上添加

Friend Sub initinfo(result As DialogResult)
    If (result = DialogResult.Cancel) Then
        Me.Refresh()
        Me.Activate()
        Button2.Enabled = False
    End If
End Sub

以上代码无效。请提供一些建议。

提前致谢 Sangeetha

2 个答案:

答案 0 :(得分:1)

您正在Form2上创建Form1的新实例,此新实例不是指原始表单,而是创建新表单。

以下是正确的步骤:

1.为Form1上的Button创建一个属性。

Public ReadOnly Property BtnSubmit As Button
    Get
        Return button1
    End Get
End Property

2.在Form2中创建Form1的属性。

Public Property Form1Instance As Form1
    Get
    End Get
    Set
    End Set
End Property

3.现在在实例化form2时,将Me作为Form1Instance属性中的引用传递

Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim f2 As Form2 = New Form2
    f2.Form1Instance = Me
    f2.Show
End Sub

4.在Form2上,使用如下:

If (Not (Form1Instance) Is Nothing) Then
   Form1Instance.BtnSubmit.Enabled = false
End If

在你的情况下,它将是:

Form1Instance.initinfo(System.Windows.Forms.DialogResult.Cancel)

我希望你明白这一点。

答案 1 :(得分:0)

如果按下Form2上的Button2(我认为是取消按钮),你想在Form1上禁用Button2。

在“属性”窗口中:

设置取消按钮属性Form2.Button2.DialogResult = DialogResult.Cancel
设置肯定响应按钮(让我们说Button1)属性Button1.DialogResult = DialogResult.OK

让Form2知道哪个是:

Form2.AcceptButton = Button1
Form2.CancelButton = Button2
在Form1中

,使用Form.DialogResult属性评估响应:
(包含在使用块中以正确处理您创建的对象()

Private Sub Button1_Click()
    Using obj As New Form2
        obj.ShowDialog(Me)

        If obj.DialogResult = Windows.Forms.DialogResult.Cancel Then
           Me.Button2.Enabled = False
        End If
   End Using
End Sub


另一种方式。
在Form2上创建自定义结果属性,并在表单关闭时检查其状态。

Class Form2
    (...)
    Public Property UserChoice As Boolean
    (...)

    Private Sub Button1_Click()
        Me.UserChoice = True
        Me.Close()
    End Sub

    Private Sub Button2_Click()
        Me.UserChoice = False
        Me.Close()
    End Sub

    (...)
End Class

在Form1中

Private Sub Button1_Click()
    Using obj As New Form2
        obj.ShowDialog(Me)

        If obj.UserChoice = False Then
           Me.Button2.Enabled = False
        End If

        'Or -> 
        Me.Button2.Enabled = obj.UserChoice
   End Using
End Sub