1

我有两个表格表格1是主要表格表格二是模型表格我想将表格设置如下:

表格1

private void button1_Click(object sender, EventArgs e)
{
        Form2 f2 = new Form2();
        f2.Show(this);

}

上面将设置 form2 的 form1 所有者,并且会显示 form2,但问题是这会在按下 Alt+Tab 键时破坏表单的顺序,因此我尝试了另一种方式,如下所示。

 private void button1_Click(object sender, EventArgs e)
 {
        Form2 f2 = new Form2();
        f2.ShowDialog(this);

 }

这是可行的,但问题是对话形式不允许我最大化/最小化和关闭

我的表单 2 是无边框表单,它设置为在特定位置显示以适合主表单 1。我的目标是不在 Alt+Tab 列表中显示 form2,当我关闭 form2 时,form1 将立即显示而不会破坏表单的顺序。

当我在第一个条件下按 Alt+Tab 键并尝试关闭 form2 时,显示的另一个应用程序而不是我不想要的 form1。

这个问题有解决办法吗?

4

2 回答 2

1

听起来您确实可以将第二种形式作为自定义控件。

请参阅Microsoft 的文档这组示例

将其视为标准控件,例如ButtonDataGridViewTextBox或类似的控件,但您可以完全控制它。您可以显示或隐藏它,您不必担心它的位置,它不会将焦点从父窗体上移开,等等。你可以把你想要的任何其他控件放在里面,封装它们的所有逻辑,等等。

于 2012-11-01T16:38:10.560 回答
-1

一个可能的技巧是在将子表单打开为模态表单后保持父表单处于活动状态,以便您也可以最大化/最小化您的父表单。扩展方法:

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool EnableWindow(IntPtr hWnd, bool enable);
public static DialogResult ShowDialogSpecial(this Form formToBeShown, Form parent)
{
    parent.BeginInvoke(new Action(() => EnableWindow(parent.Handle, true)));
    formToBeShown.ShowDialog(parent);

    return formToBeShown.DialogResult;
}

您可以致电:

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    //additionally do f2.ShowInTaskbar = false to make sense.
    f2.ShowDialogSpecial(this);
}

这不会让子表单真正充当非模态表单,因为子表单可以覆盖父表单。

于 2012-11-01T14:57:53.830 回答