【问题标题】:opening a window form from another form programmatically以编程方式从另一个窗体打开窗口窗体
【发布时间】:2013-02-23 14:07:34
【问题描述】:

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

  1. 谁能指导我怎么做?
  2. 新表格会影响或阻碍原主表格中的事情吗? (如果是,那么如何阻止它?)

【问题讨论】:

  • 为什么要等 2.3 秒?
  • 你有没有尝试过?
  • 这是我最喜欢的重复问题之一.....:)

标签: c# winforms


【解决方案1】:

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

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

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

也可以关闭当前表单,你可以使用

this.close();

【讨论】:

  • 什么是 Form1?
  • Form1 是要打开的表单的名称。如果它被命名为其他名称,则在此处使用其他名称。
【解决方案2】:

我会这样做:

var form2 = new Form2();
form2.Show();

要关闭当前表单,我会使用

this.Hide(); 而不是

this.close();

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

【讨论】:

    【解决方案3】:

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

    按钮点击的代码如下

    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() 只会隐藏表单,代码部分仍然可以运行

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        这也可能有帮助:

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

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

        当按钮被点击时,它会打开另一个窗口,你需要在你的主窗体上创建另一个窗体和一个按钮才能工作。

        【讨论】:

          【解决方案6】:
          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 当前表单将隐藏并打开新表单

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多