【问题标题】:How to open a form only once?如何只打开一次表格?
【发布时间】:2013-03-12 15:59:31
【问题描述】:

我有一个显示表单调用系统参数的应用程序,我希望表单只弹出一次,这样用户就无法打开同一个窗口一百万次。我试过了

    private void SystemParametersClick(object sender, EventArgs e)
    {
        Xpan sp = new Xpan();

            sp.CurrentItem = this.GetCaller(sender);
            if (sp.Visible==false)
            {
                sp.Show();  
            }

    }  

它不起作用,因为它不是同一个实例。 :(
如何让它只弹出一次?

【问题讨论】:

标签: c#


【解决方案1】:

为什么要在方法中实例化表单?只需在父类中实例化它,并且只在点击事件中调用Show() 方法即可。

public class MainForm : Form
{
    private Xpan _Xpan;

    public MainForm()
    {
        InitializeComponent();
        _Xpan = new Xpan();
    }

    private void SystemParametersClick(object sender, EventArgs e)
    {
        _Xpan.Show();
    }
}

【讨论】:

    【解决方案2】:

    也许这种简单的方法就足够了?

    private bool has_been_shown = false;
    
    private void SystemParametersClick(object sender, EventArgs e)
    {
        if(!has_been_shown)
        {
            has_been_shown = true;
            Xpan sp = new Xpan();
        }
    }  
    

    【讨论】:

      【解决方案3】:

      首先禁用 Xpan 窗体的关闭。您可以通过定义 OnFormClosing 事件处理程序来实现。

      private void Xpan_FormClosing(object sender, FormClosingEventArgs e)
      {
          e.Cancel = true;
          Hide();
      }
      

      然后将你的 Xpan 表单定义为父表单的类成员,例如:

      private readonly Xpan _sp = new Xpan();
      

      最后以这种方式污染您的 Click 处理程序:

      private void SystemParametersClick(object sender, EventArgs e)
      {
          if (!_sp.Visible)
          {
              _sp.Show();
          }
          else
          {
              _sp.Activate();
          }
      }
      

      就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2020-08-11
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多