我在哪里控制winform右上角的"X"关闭按钮的行为?

Joh*_*ohn 16 vb.net visual-studio-2005 modeless winforms

我想通过使一些表格无模式来使我的VB.NET应用程序更好用.

我想我已经想出如何使用dlg.Show()和dlg.Hide()而不是调用dlg.ShowDialog().我在我的主申请表中有一个无模式对话框的实例:

Public theModelessDialog As New dlgModeless
Run Code Online (Sandbox Code Playgroud)

启动我打电话的无模式对话框

theModelessDialog.Show()
Run Code Online (Sandbox Code Playgroud)

而确定和取消按钮处理程序中的dlgModeless

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
    Me.DialogResult = System.Windows.Forms.DialogResult.OK
    Me.Hide()
End Sub

Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
    Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
    Me.Hide()
End Sub
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.

不过,右上角的"X"按钮让我感到高兴.当我用那个按钮关闭表单时,然后尝试重新打开表单,我明白了

ObjectDisposedException未处理.无法访问已处置的对象.

我觉得我大部分都在那里,但我无法弄清楚如何做以下任何一种情况:

  • 隐藏"X"按钮
  • 抓住事件,所以我不处理对象(就像我点击取消一样对待它)

有任何想法吗?

这个对话框的类是System.Windows.Forms.Form.

Mic*_*odd 21

捕获FormClosing事件,如果原因是UserClosing,则将事件上的Cancel设置为true.

类似于以下内容:

Private Sub Form1_FormClosing(sender as Object, e as FormClosingEventArgs) _ 
     Handles Form1.FormClosing

    if e.CloseReason = CloseReason.UserClosing then
        e.Cancel = true
        Me.Hide()
    end if

End Sub
Run Code Online (Sandbox Code Playgroud)


Mat*_*ley 4

用于Me.Close()隐藏表单。要打开它,请使用以下代码片段:

If theModelessDialog.IsDisposed Then
    theModelessDialog = New dlgModeless
End If
dlgModeless.Show()
Run Code Online (Sandbox Code Playgroud)

如果这是保存数据,那么您需要找到某种存储数据的方法(可能在表单中的静态变量中)。这是实现您想要实现的目标的正确方法。

如果我的 VB 关闭了,你也必须原谅我,已经有一段时间了。