2010-12-06 81 views
0

我想運行我的表單(禁用所有控件) 並且它會有另一個用戶名和密碼的形式運行showDialog! 如果沒有登錄,用戶將無法進入主窗體!c#運行一個窗體,然後用showDialog顯示另一個窗體?

private void Form1_Load(object sender, EventArgs e) 
     { 
      this.Show(); 
      Form2 f2 = new Form2(); 
      f2.ShowDialog(); 
     } 

我試過上面的代碼,它不應該如它應該工作!

我如何以我需要的方式實現它?

歡呼

+2

我看到一個問號,但前面的句子聽起來不像一個問題。 – Bobby 2010-12-06 13:23:34

+0

我想OP在想要顯示第一個表單後想知道正確的位置是直接加載第二個表單的位置。 – VVS 2010-12-06 13:36:41

回答

2

從父窗體:

childForm.ShowDialog(this); 

這將使子窗體模式,以父窗體。就位置而言,有一個屬性關閉表單(您將要設置在子表單上),告訴它從哪裏開始(中心屏幕,中心父級等)

System.Windows。 Forms.Form實現了IWin32Window,這就是它的工作原理。

0

呃......

DialogResult result = mySecondForm.ShowDialog() 

,直到這一次關閉時將禁止父窗體。 DialogResult的將是一個枚舉值是一樣的東西確定/取消/ YESNO等

2

目前尚不清楚的問題/問題是什麼,但你可以嘗試確保你在父形式傳遞,即

using(var childForm = new MySpecialLoginForm(...)) { 
    childForm.ShowDialog(this); 
} 
0

我通常使用以下模式,如果我想要做某事。之後的形態已經完全加載:

public partial class BaseForm : Form 
{ 
    public event EventHandler Loaded; 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     Application.Idle += OnLoaded; 
    } 

    protected void OnLoaded(object sender, EventArgs e) 
    { 
     Application.Idle -= OnLoaded; 

     if (Loaded != null) 
     { 
      Loaded(sender, e); 
     } 
    } 
} 

如果我得到從音素表示我的主要形式,我有一個Loaded事件,在你的情況,我會按如下方式使用。

static class Program 
{ 

    [STAThread] 
    static void Main() 
    { 
     var mainForm = new MainForm(); 
     mainForm.Loaded += (sender, e) => { new LoginDialog().ShowDialog(mainForm); }; 

     Application.Run(mainForm); 
    } 
} 
相關問題