2013-03-12 74 views
-2

我有一個應用程序顯示窗體調用系統參數,我希望窗體只彈出一次,以便用戶無法打開同一窗口百萬次。我試過如何只打開一次表單一次?

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

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

    } 

它不工作,因爲它不是同一個實例。 :(
我如何讓它只彈出一次?

+0

你可能正在尋找一個Singleton模式 – Aamir 2013-03-12 07:13:37

+2

試試這個http://stackoverflow.com/questions/3087841/how-can-i-make-a-single-instance-form-not-application – 2013-03-12 07:13:49

回答

0

爲什麼你在方法中實例化窗體?只需在父類中實例化它,並僅在click事件中調用Show()方法。

public class MainForm : Form 
{ 
    private Xpan _Xpan; 

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

    private void SystemParametersClick(object sender, EventArgs e) 
    { 
     _Xpan.Show(); 
    } 
} 
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(); 
    } 
} 
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(); 
    } 
} 

就是這樣。