Winforms控制表单

时间:2010-03-24 09:07:49

标签: c# winforms

如何从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)方式中,总有一个主要形式。我不想要这个。您在此问题中使用的任何其他方法

3 个答案:

答案 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度,请告诉我!