2011-06-20 58 views
0

所以基本上我想做的是做一個簡單的表單,用戶可以輸入登錄信息(將它們記錄到一個mysql數據庫中,然後程序將查詢數據庫,顯示信息,並且用戶可以做一些操作。我應該使用用戶控件嗎?

我想避免是有一大堆的彈出窗口的形式(一個登錄,一個選擇用於數據庫等查詢)什麼...

所以我在想什麼在我的主表中嵌入了「子表格」,我正在閱讀這篇文章,並發現大多數人表示,將用戶控件嵌入到表單中,而不是其他表單中。可以看到我說的,這是什麼,我希望它看起來像一個非常基本骨架:

enter image description here

正如你看到的,很簡單,只要不是讓所有的彈出對話框,嵌入用戶輸入的東西到表格的右側

所以,我應該確實使用用戶控件呢?

如果是這樣,我有一些從用戶控件返回主窗體的問題(因爲沒有showDialog()方法或用戶控件的對話框結果,所以我不知道用戶何時進入例如,他們所有的登錄數據爲SQL服務器。)

我曾嘗試使用調用引用來傳遞值的用戶控件,我想由用戶控件設置 - 但我還沒有能使這項工作...

反正,如果我應該使用userControl這裏與userForm,我應該如何獲得用戶輸入回到mainform?

+0

,沒有必要把 「C#」 的稱號。它已經在標籤中。 –

+0

好的......我會記住下次謝謝 – Toadums

回答

3

使用Panel

我通常用於將信息傳遞迴主窗體的模式是對嵌入式內容進行子類化,併爲每個我想要傳遞迴主窗體的東西創建子類的屬性。

例子:

public class LoginPanel : Panel 
{ 
    public string Username { get; set;} 
    ... 
} 

如果我想獲得幻想和做的事情一樣自動檢查,看主機是否有效或證書將要驗證我也可以一個Changed事件添加到Panel時將觸發其中包含的任何輸入內容都會發生變化。然後,我會在我的主窗體上爲此事件添加一個處理程序。

如果你想獲得真正看中的(我想這樣做,如果我是要創建一個可重複使用的用戶控件),你可以做你的子類的所有連接和身份驗證,只有一個SqlConnection財產和火Connected事件。

事情是這樣的:

public class LoginPanel : Panel 
{ 
    // A property returning a valid connection when 
    // connected, null otherwise. 
    public SqlConnection connection { get; set;} 
    ... 

    // An event that clients can use to be notified whenever 
    // a connection is made. 
    public event EventHandler Connected; 

    // Invoke the Connected event; called whenever a successful 
    // connection is made 
    protected virtual void OnConnected(EventArgs e) 
    { 
     if (Connected!= null) 
      Connected(this, e); 
    } 
} 
+0

好吧,我會嘗試使用面板......這實際上很有意義。我仍然有點朦朧的唯一部分是如何將信息從面板傳回主程序?因爲主程序不知道文本框的值何時輸入正確......我可以在面板中有一個按鈕,但主按鈕如何知道按鈕被按下的時間?謝謝!! – Toadums

+0

@Toadums如果你喜歡這個答案,你應該upvote並接受! :-) –

+0

我知道如何傳回值(就像你在第一個代碼片段中所做的那樣),問題是主程序(它佔據面板)知道何時有有效值? – Toadums

1

當您要在整個應用程序的不同位置一遍又一遍地做同樣的事情時,您想要使用自定義用戶控件。例如,如果您的應用程序中有多個用戶需要輸入登錄信息的地方,那麼您將希望製作一個用戶控件來封裝該功能,以便您只需編寫邏輯並查看一次,而不是一遍又一遍再次。應用程序的複雜性增加了,但不必編寫冗餘代碼的價值遠遠大於小複雜度

但是,在一次只執行某個功能的地方,添加用戶控件會增加沒有增加反冗餘值的應用程序的複雜性,所以應該避免。

我會把問題的「如何做」部分留給其他人。