从另一个窗体编程地打开窗体

29
我正在制作一个Windows Forms应用程序。我有一个表单。我想在运行时从原始表单上的按钮单击打开一个新表单。然后以编程方式关闭此新表单(2,3秒后),但是从与GUI主线程不同的线程中。
  1. 有人可以指导我如何做吗?
  2. 新表单会影响或妨碍原始主表单中正在进行的事情吗? (如果是,则如何停止它?)

你尝试了什么?(http://whathaveyoutried.com) - Kendall Frey
为什么要等待2、3秒钟呢? - Ralf de Kleine
你有尝试过任何东西吗? - Mohammad Dehghan
1
这是我最喜欢的重复问题之一..... :) - Sandy
6个回答

54

如果要通过按钮点击打开,请在按钮事件处理程序中添加以下代码

var m = new Form1();
m.Show();

这里的Form1是您想要打开的表单的名称。
同时,要关闭当前的表单,您可以使用:
this.close();

Form1是什么? - LongChalk
Form1是要打开的窗体的名称。如果它被命名为其他名称,则在此处使用其他名称。 - John Foll

13
我会这样做:
var form2 = new Form2();
form2.Show();

关闭当前表单时,我会使用 this.Hide(); 而不是

this.close();

看看这个Youtube频道链接,里面有一些易于入门的教程,如果你是初学者,可能会很有帮助。


8
这是一个老问题,但为了收集知识而回答。 我们有一个原始表单,其中包含一个按钮来显示新表单。

enter image description here

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

现在当点击时,会显示新的表单。因为你想要在2秒后隐藏它,所以我们向新表单设计者添加了一个onload事件。
this.Load += new System.EventHandler(this.OnPageLoad);

这个OnPageLoad函数在表单加载时运行。
NewForm.cs中,
public partial class New_Form : Form
{
    private Timer formClosingTimer;

    private void OnPageLoad(object sender, EventArgs e)
    {
        formClosingTimer = new Timer();  // Creating a new timer 
        formClosingTimer.Tick += new EventHandler(CloseForm); // Defining tick event to invoke after a time period
        formClosingTimer.Interval = 2000; // Time Interval in miliseconds
        formClosingTimer.Start(); // Starting a timer
    }
    private void CloseForm(object sender, EventArgs e)
    {
        formClosingTimer.Stop(); // Stoping timer. If we dont stop, function will be triggered in regular intervals
        this.Close(); // Closing the current form
    }
}

在这个新表单中,一个计时器被用来调用一个关闭该表单的方法。
这是新表单,在2秒后自动关闭,我们将能够在这两个表单上操作,而且这两个表单之间没有干扰。

enter image description here

就您的知识而言,

form.close()会释放内存,我们将无法再与该表单进行交互。 form.hide()只会隐藏表单,代码部分仍然可以运行。

有关计时器的更多详细信息,请参阅此链接,https://learn.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.7.2


1
这可能也会有所帮助:

void ButtQuitClick(object sender, EventArgs e)
{
    QuitWin form = new QuitWin();
    form.Show();
}

ButtQuit更改为您的按钮名称,也将QuitWin更改为您创建的表单名称。

当单击按钮时,它将打开另一个窗口,您需要在主表单上创建另一个表单和一个按钮才能使其正常工作。


1

0
private void btnchangerate_Click(object sender, EventArgs e)
    {
        this.Hide();  //current form will hide
        Form1 fm = new Form1(); //another form will open
        fm.Show();


    }

点击按钮后,当前表单将隐藏,新表单将打开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接