如何从main()
控制所有表单 Form1 frm1 = new Form1();
Form1 frm2 = new Form1();
Form1 frm3 = new Form1();
Application.Run(frm1); // This way form-control goes to the frm1.
// In frm1 i have to write
frm1.Clicked += ()=>frm2.Show;
// I want the form-controlling style more explicitly
// I dont want to use Application.Run()
frm1.Show();
frm1.Clicked += frm2.Show();
form.ShowDialog()有很多帮助,但执行堆栈可能会溢出。 Form.Show和Form.Hide方法在设置应用程序类时运行。 在Application.Run(Form)方式中,总有一个主要形式。我不想要这个。您在此问题中使用的任何其他方法
答案 0 :(得分:1)
你的问题是,你有四种形式。所有这些都应该并排存在,但是因为你向主人提出了Form1
,你会遇到一些问题。
要解决此问题,您需要另外四个FormMaster
。这个将从Application.Run()
开始。现在这个表单可以是Visible = false
,但是在它的构造函数中,您可以创建所有四个表单并决定它们将如何粘合在一起,首先显示哪个表单以及在什么情况下将关闭整个应用程序。
答案 1 :(得分:0)
通常的方法是使用event handlers。
答案 2 :(得分:0)
我能理解的是,你有几个WinForm
并且你想要一些主表格来控制它们?好吧,如果我理解/假设是正确的,那么关于控制如下?
public partial class Form3 : Form
{
private void Form3_Load(object sender, EventArgs e)
{
Demo();
}
MyMainForm main = new MyMainForm(); //Your actual form
private void Demo()
{
main.Click += new EventHandler(main_Click);
main.ShowDialog();
}
void main_Click(object sender, EventArgs e)
{
MyNotificationForm notify = new MyNotificationForm();//Your notification form
notify.Name = "notify";
notify.Click += new EventHandler(notify_Click);
notify.ShowDialog(main);
}
void notify_Click(object sender, EventArgs e)
{
MyWarningForm warning = new MyWarningForm();//Your warning form
warning.Click += new EventHandler(warning_Click);
warning.ShowDialog(main.ActiveMdiChild);
}
void warning_Click(object sender, EventArgs e)
{
((Form)sender).Close(); //Click on form would close this.
}
}
以下是我如何实现这些类。
public class CBaseForm : Form
{ public CBaseForm() { this.Text = "Main App"; } }
public class MyWarningForm : CBaseForm
{ public MyWarningForm() { Label lbl = new Label(); lbl.Text = "Warning Form"; this.Controls.Add(lbl); } }
public class MyNotificationForm : CBaseForm
{ public MyNotificationForm() { Label lbl = new Label(); lbl.Text = "Notification Form"; this.Controls.Add(lbl); } }
public class MyMainForm : CBaseForm
{ public MyMainForm() { Label lbl = new Label(); lbl.Text = "Controller Form"; this.Controls.Add(lbl); } }
你MainForm
将按常规开始
Application.Run(new Form3());
如果我将你的问题拖到180度,请告诉我!