C# 以编程方式从另一个窗体打开窗口窗体

C# 以编程方式从另一个窗体打开窗口窗体,c#,winforms,C#,Winforms,我正在制作一个Windows窗体应用程序。我有一张表格。我想在运行时通过单击按钮从原始表单打开一个新表单。然后以编程方式关闭此新表单(2,3秒后),但从gui主线程以外的线程关闭 有人能指导我怎么做吗 新的形式会影响或阻碍以原来的主要形式进行的事情吗?(如果是,如何停止?) 您只需要使用Dispatcher从UI线程以外的线程执行图形操作。我不认为这会影响主要形式的行为。这可能会帮助您: 要使用按钮单击打开,请在按钮事件处理程序中添加以下代码 var m = new Form1(); m.Sho

我正在制作一个Windows窗体应用程序。我有一张表格。我想在运行时通过单击按钮从原始表单打开一个新表单。然后以编程方式关闭此新表单(2,3秒后),但从gui主线程以外的线程关闭

  • 有人能指导我怎么做吗
  • 新的形式会影响或阻碍以原来的主要形式进行的事情吗?(如果是,如何停止?)

  • 您只需要使用Dispatcher从UI线程以外的线程执行图形操作。我不认为这会影响主要形式的行为。这可能会帮助您:

    要使用按钮单击打开,请在按钮事件处理程序中添加以下代码

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

    这里Form1是要打开的表单的名称

    此外,要关闭当前表单,您可以使用

    this.close();
    

    我会这样做:

    var form2 = new Form2();
    form2.Show();
    
    要关闭当前窗体,我将使用

    this.Hide()而不是

    this.close();
    

    查看此链接以获取简易入门教程如果您是初学者,您可能会发现它很有用

    这是一个老问题,但回答此问题是为了收集知识。 我们有一个带有按钮的原始表单来显示新表单

    点击按钮的代码如下所示

    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秒后自动关闭的新窗体,我们将能够在这两个窗体之间没有干扰的情况下操作这两个窗体

    就你所知

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

    有关计时器的更多详细信息,请参阅此链接

    点击btn,当前表单将隐藏,新表单将打开,这也可能有帮助:

    void ButtQuitClick(object sender, EventArgs e)
    {
        QuitWin form = new QuitWin();
        form.Show();
    }
    
    ButtQuit更改为您的按钮名称,并将QuitWin更改为您制作的表单名称


    单击按钮将打开另一个窗口,您需要在主窗体上创建另一个窗体和一个按钮以使其工作。

    为什么要等待2,3秒?您是否尝试过任何操作?这是我最喜欢重复的问题之一……:)什么是窗体1?窗体1是要打开的窗体的名称。如果它被命名为其他名称,那么在这里使用其他名称。
    void ButtQuitClick(object sender, EventArgs e)
    {
        QuitWin form = new QuitWin();
        form.Show();
    }