gpt4 book ai didi

c# - 阻塞/解除阻塞的 winforms 调用

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:06 27 4
gpt4 key购买 nike

我目前正面临这种情况,我需要你的帮助:

有两个 winForms Form1 和 Form2,单击 form1 上的按钮事件将启动 form2。我想启动 form2 并关闭(处置)form1。

我有两种调用 form2 的方法:

1) 使用 ShowDialog() 的阻塞调用;

namespace programm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void callForm2bt_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
this.Close();
}
}
}

在这种情况下,一旦调用了 form2,我就无法关闭(处置)form1。

2) 使用 Show() 的解锁调用;

namespace programm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void callForm2bt_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
this.Close();

}
}
}

在这种情况下,一旦关闭(处置)form1,它就会自动处置 form2。

知道如何处理 form1 并保持 form2 的功能吗?

谢谢

最佳答案

要么相反:运行Form2作为主窗体,将其可见性设置为false,然后从中启动Form1,当 Form1 完成后关闭它并将 Form2 可见性设置为 true。所以:

static void Main()
{
...
Application.Run(new Form2());//instead of Form1
}

public class Form2 ...
{
//At From2.Load:
private void Form2_Load(object sender, EventArgs e)
{
this.Hide();//the form2 will hide and show the form 1.
Form1 form1 = new Form1(this);
form1.Show();
}
}

public class Form1...
{

private Form2 _form2 = null;

public Form1()
{ InitializeComponents();}

public Form1(Form2 form2) : this()
{
_form2 = form2;
}

private void callForm2bt_Click(object sender, EventArgs e)
{
if (_form2 != null)
{
_form2.Show();
}
this.Close();
}
}

或者使用您当前的方法,但不要关闭 Form1,而是在完成后将其可见性设置为 false。通过调用 this.Hide();this.Visable = false; 喜欢:

private void callForm2bt_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
this.Hide();//this will hide the control from the user but it will still alive.
}

编辑:在第一个解决方案中,您还可以使用 form1.ShowDialog() 并避免将 Form2 实例传递给 Form1 构造函数,所以:

//At From2.Load:
private void Form2_Load(object sender, EventArgs e)
{
this.Hide();//the form2 will hide and show the form 1.
Form1 form1 = new Form1();
form1.ShowDialog();
this.Show();//the form1 is closed so just show this again.
}

关于c# - 阻塞/解除阻塞的 winforms 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com