2013-05-18 58 views
0

好吧,這就是我正在嘗試做的事情。 我有一個C#桌面應用程序中的主窗體,其中我有一個menuStrip和splitContainer。 在運行應用程序時,我在隱藏menuStrip時將名爲'Login'的UserControl加載到splitContainer.Panel2。 Login控件包含用戶名,密碼和一個按鈕來登錄領域。使用UserControl登錄,然後啓用主菜單中的menuStrip

http://i.stack.imgur.com/5jcnK.png

一旦經過認證(按鈕的點擊)我想啓用的MenuStrip,並允許在splitContainer.Panel2其他用戶控件,同時隱藏Login控件。

http://i.stack.imgur.com/lwLvP.png

如何我做到這一點?我試圖從登錄控制啓動一個事件,並以某種方式使其以主要形式工作,但無法實現。 這種方法甚至值得嘗試,或者我應該單獨打開多個表單(我討厭這麼做!) 關於如何更改splitContainer.Panel2中視圖的任何更清晰的方法(除了將面板疊置在另一個上方之外,這將是爲我設計的噩夢),同時保持splitContainer.Panel1具有相同的內容。

+0

事件將是完美的。表單將訂閱UserControl事件,然後適當地切換控件。使用事件方法有什麼困難? –

+0

@Idle_Mind感謝您的建議。 IDK,事件不起作用。也許我做得不對,因爲我提到了一些教程。 在登錄控件類中我聲明: public delegate void EventHandler(Object sender,EventArgs e); 公共事件EventHandler已認證; 在登錄按鈕點擊: 如果用戶通過數據庫認證我做: 1.認證(這,新的System.EventArgs()); 或 2. this.Authenticated(this,e);我想要做: Login.EventHandler = new EventHandler Flummoxed,因爲它應該按照教程工作。 – Abhi

回答

0

你的嘗試聽起來應該是有效的。

您是在設計時還是通過代碼添加Login控件?

下面是通過代碼創建的示例...對我工作得很好。

Form1中:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     menuStrip1.Visible = false; 
     Login login = new Login(); 
     login.Authenticated += new EventHandler(login_Authenticated); 
     splitContainer1.Panel2.Controls.Add(login); 
    } 

    void login_Authenticated(object sender, EventArgs e) 
    { 
     Login login = (Login)sender; 
     // ... possibly extract some info from "login" ... 

     menuStrip1.Visible = true; 
     login.Dispose(); 
    } 

} 

登錄用戶控件:

public partial class Login : UserControl 
{ 
    public Login() 
    { 
     InitializeComponent(); 
    } 

    public event EventHandler Authenticated; 

    private void btnLogin_Click(object sender, EventArgs e) 
    { 
     if (true) // if they have authenticated 
     { 
      if (Authenticated != null) // only raise the event if we have subscribers 
      { 
       Authenticated(this, new EventArgs()); 
      } 
     } 
    } 
} 
相關問題