【问题标题】:How to change the beginning form in C#如何在 C# 中更改开始形式
【发布时间】:2015-12-26 23:14:09
【问题描述】:

我需要有关 Windows 窗体的帮助。我创建了几个 Windows 窗体,并试图将它们链接在一起。现在 form4 有两个按钮,我想链接到 form2form3。我在 form4 上的第一个按钮不加载 form2 它只是在我单击按钮时重新加载自身。我的按钮代码是:

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

form2 我有一个加载事件

  private void form4_load(object sender, EventArgs e)
    {
        var f4 = new Form4();
        this.Close();
        f4.ShowDialog();

    }

这是 button1_click 在 form2 上的样子:

 private void button1_Click(object sender, EventArgs e)
    {
        Form1.setPlayerNames(p1.Text, p2.Text);
        this.Close();

    }

【问题讨论】:

  • 您没有提供足够的代码来重现问题。大概你的第二个表单正在做一些阻止它被显示的事情。
  • 我希望 form4 成为我的起始表单,并希望它链接到 form2 和 form3
  • 如果你想改变开始形式去 program.cs 把它改成这个。 Application.Run(new Form4())
  • 好的,我做到了。表单 4 上链接到表单 2 的按钮仍然不起作用
  • 从您发布的代码来看,您似乎正试图从同一个 Form4 的加载事件中打开 Form4 ?

标签: c# winforms visual-studio-2015


【解决方案1】:

你的问题很少。第一个是模态表单的工作原理,您必须这样做:

void form4_load(object sender, EventArgs e)
{
    var f4 = new Form4();
    this.Close(); // close first
    f4.ShowDialog();
}

否则 this.Close 在您关闭 f4 之前不会发生。

第二个与启动表单的运行方式有关。通常你有代码

Application.Run(new Form1());

你必须把它改成类似

var f1 = new Form1();
f1.ShowDialog();

否则当您关闭f1 时,您的应用程序将终止。而你不想要这个,你想要另一个表单作为主表单。

【讨论】:

  • 我不知道表单 2 上的按钮无法加载表单 1 有什么问题
【解决方案2】:

我没有得到你想要做的事情,但这就是发生的事情:

通过按下按钮,您正在创建 Form2 类型的表单。

当 Form2 完成加载后,它会创建一个 Form4 类型的新表单并显示它。

所以基本上会发生什么:


Form4 已创建。

用户在 Form4 上按下了 Button1

Button1 创建新的 Form2 并显示它。

Form2 加载,创建一个新的 Form4 并显示它。


这就是为什么您会看到 Form4 “重新加载”本身。

如果您删除 Form2 加载事件中显示 Form4 的行,您将看到正在创建的 Form2。

【讨论】:

    【解决方案3】:

    你需要调用program.cs上的表单,像这样:

     static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form4());
        }
    }
    

    并将form2上的加载事件留空,像这样;

    private void form4_load(object sender, EventArgs e)
    {
    
    }
    

    你已经在开始时加载了form4,无需再次加载

    【讨论】:

      【解决方案4】:
      private void Form1_Load(object sender, EventArgs e)
      {
           Hide();
           new Form2().Show();
      }
      

      更短的方法,如果您不想让 form1 隐藏,请删除 Hide();

      【讨论】:

        猜你喜欢
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-23
        • 1970-01-01
        相关资源
        最近更新 更多