-2

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

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

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

    }  

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

4

3 回答 3

0

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

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();
    }
}  
于 2013-03-12T07:19:45.010 回答
0

首先禁用 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();
    }
}

就是这样。

于 2013-03-12T07:24:24.757 回答
0

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

public class MainForm : Form
{
    private Xpan _Xpan;

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

    private void SystemParametersClick(object sender, EventArgs e)
    {
        _Xpan.Show();
    }
}
于 2013-03-12T07:59:31.933 回答