-2

フォーム呼び出しのシステム パラメータを表示するアプリがあり、ユーザーが同じウィンドウを何百万回も開くことができないように、フォームを 1 回だけポップする必要があります。私は試した

    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

メソッド内でフォームをインスタンス化するのはなぜですか? 親クラス内でインスタンス化するだけ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 に答える
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 に答える