相关疑难解决方法(0)

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

我想通过使一些表格无模式来使我的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.

vb.net visual-studio-2005 modeless winforms

16
推荐指数
2
解决办法
6万
查看次数

在没有立即关闭的情况下处理新表格的正确方法是什么?

所以在我的应用程序中,我倾向于动态创建表单的新实例,然后使用Form.Show()来显示它们(非模态).

private void test_click(object sender, EventArgs e)
{
    var form = new myForm();
    form.Show();
}
Run Code Online (Sandbox Code Playgroud)

但是,Code Cracker告诉我应该处理这些表格.所以,我用"使用"语句包装它们,但随后它们在打开后立即关闭.

using (var form = new myForm())
{
    form.Show();
}
Run Code Online (Sandbox Code Playgroud)

我不想使用Form.ShowDialog(),因为在少数情况下我打开只显示报告的新窗口; 我不需要它们是模态的.

.net c# dispose winforms

7
推荐指数
2
解决办法
2746
查看次数

标签 统计

winforms ×2

.net ×1

c# ×1

dispose ×1

modeless ×1

vb.net ×1

visual-studio-2005 ×1