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

时间:2013-02-23 14:07:34

标签: c# winforms

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

  1. 有人可以指导我怎么做吗?
  2. 新表单会影响或阻碍原始主表单中发生的事情吗? (如果是,而不是如何阻止它?)

6 个答案:

答案 0 :(得分:31)

要点击按钮打开,请在按钮事件处理程序

中添加以下代码
Form1 m = new Form1();
            m.Show();

此处Form1是您要打开的表单的名称。

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

this.close();

答案 1 :(得分:11)

我会这样做:

Form2 frm2 = new Form2();
frm2.Show();

并关闭当前表单我会使用

this.Hide();而不是

this.close();

查看此Youtube channel 链接以获取简单的启动教程,如果您是初学者,可能会觉得它很有用

答案 2 :(得分:1)

这可能也有帮助:

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

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

单击该按钮将打开另一个窗口,您需要在主表单上创建另一个表单和一个按钮。

答案 3 :(得分:0)

您只需使用Dispatcher从UI线程以外的线程执行图形操作。我不认为这会影响主表单的行为。这可能对您有所帮助: Accessing UI Control from BackgroundWorker Thread

答案 4 :(得分:0)

这个问题太老了,但要回答以收集知识。

我们有一个原始表单(主表单),带有一个按钮以显示新表单(第二表单)。

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 System.Windows.Forms.Timer formClosingTimer;
        public New_Form()
        {
            InitializeComponent();
        }
        private void OnPageLoad(object sender, EventArgs e)
        {
            formClosingTimer = new System.Windows.Forms.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://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.7.2

答案 5 :(得分: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();


    }

点击btn,当前表格将隐藏,新表格将打开