2013-06-13 73 views
-1

我有這個「家」作爲主要形式...我有管理登錄按鈕,它打開管理登錄表單...但按鈕應限制管理員的數量登錄表格只能使用允許點擊一個按鈕的形式的數量

+0

可能是http://stackoverflow.com/questions/3087841/how-can-i-make-a-single-instance-form-not-application – CodeCamper

回答

1

一個簡單的解決方法是在打開表單後設置一個boolean flag

bool AdminFormOpen; 

private void adminLoginBtn_click() 
{ 
    if(!AdminFormOpen) 
    { 
     // Open the form. 
     AdminFormOpen = true; 
    } 
} 

然後,在Admin Form中,確保您通過增值方法重置此值。例如:

protected void OnClosed(EventArgs e) 
{ 
     parentForm.setAdminFormOpen(false); 
} 
+0

的副本不要忘記在打開後實際設置標誌形式:P – Kai

+0

Wayyy超前你!謝謝:) – christopher

0

如果表單已經存在,則使用布爾變量來發信號。

2

要麼顯示登錄表單ShowDialog() - >只要登錄表單可見或跟蹤打開的表單並在登錄表單打開時按鈕單擊時不做任何操作。

第一個例子:

private void ButtonClick(object sender, EventArgs e) 
{ 
    var frm = new LoginForm(); 
    frm.ShowDialog(); 
} 

第二個例子:

private LoginForm form; 

private void ButtonClick(object sender, EventArgs e) 
{ 
    if (form != null) 
    { 
     if (form.Visible) 
     { 
      return; 
     } 

     form.Show(); 
    } 
    else 
    { 
     form = new LoginForm(); 
     form.Show(); 
    } 
} 

第三個例子(使用LINQ):

private void ButtonClick(object sender, EventArgs e) 
{ 
    if (Application.OpenForms.Cast<Form>().Any(x => x.GetType() == typeof(LoginForm))) 
    { 
     return; 
    } 

    var frm = new LoginForm(); 
    frm.Show(); 
} 
+0

+1所有的解決方案都是正確的。對不起,沒有看到你在寫我自己的答案時添加了第三個例子。決定離開它,因爲更短linq –

+1

你的LINQ比我的更好/更短:) +1 – gzaxx

1

您可以使用Application.OpenForms收集檢查登錄表單已經打開,而不是使用布爾標誌:

if (!Application.OpenForms.OfType<LoginForm>().Any()) 
{ 
    var loginForm = new LoginForm(); 
    loginForm.Show(); 
} 

或使用Form.ShowDialog()以模態形式打開登錄表單。