2013-03-12 2 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

+2

Попробуйте http://stackoverflow.com/questions/3087841/how-can-i-make-a-single-instance-form-not-application –

ответ

0

Почему вы создаете экземпляр формы внутри метода? Просто создайте экземпляр внутри родительского класса и вызовите только метод Show() в событии click.

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(); 

И, наконец, осквернять ваш обработчик Нажмите так:

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

Вот и все.

Смежные вопросы