2011-06-20 7 views
0

基本的に私がやりたいことは、ユーザーがログイン情報を入力できるシンプルなフォームを作成することです(mysql DBにログオンするために、プログラムはデータベースにクエリを行い、情報を表示し、ユーザーはいくつかの操作を行います。ユーザーコントロールを使用する必要がありますか?

を私は(データベースなどのクエリを選択するために、1にログインするために1)ポップアップウィンドウ形式の束を持っている避けたいどのような...私が考えていたので、何

を私のメインフォームには「サブフォーム」が埋め込まれていましたが、これについて読んでいて、ほとんどの人がユーザーコントロールをフォームや他のフォームに入れ子にする方が良いと答えています。

enter image description here

はあなただけではなく、すべてのポップアップボックスを有していると、非常にシンプルな、見ることができるように埋め込む:私が何を言っているか見ることができ、これは、私は次のようにそれを見てみたいものの非常に基本的な骨格でありますフォームの右側にユーザ​​ー入力のものが

だから、私は確かに、このためにユーザーコントロールを使用してすべきですか?

もしそうなら、ユーザーコントロールからのshowDialog()メソッドやダイアログの結果がないので、ユーザーフォームにメインフォームに値を戻す際にいくつか問題があります。そのため、ユーザーがいつ入力したか分かりませんSQL Serverのすべてのログインデータなど)。

私は、ユーザーコントロールで設定したいusercontrolに値を渡すためにコールを使用しようとしましたが、私はできませんでした私はどのように私は戻ってメインフォームへのユーザ入力を取得する必要があり、ユーザーフォーム対ここでユーザーコントロールを使用してしなければならない場合は、とにかく...

をその作品を作るために?

+0

それがタイトルに "C#の" を入れる必要はありません。すでにタグに入っています。 –

+0

ok ...私は次回のおかげで覚えています – Toadums

答えて

3

使用Panel。私は通常、バックメインフォームに情報を伝達するために使用

パターンは私の埋め込まれたコンテンツのためのパネルをサブクラス化し、私は戻って私のメインフォームに渡したいもののそれぞれについて、このサブクラスのプロパティを作成しています。

例:

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

私は空想を取得したいとした場合は、自動的にのようなものは、ホストが有効であるか、資格情報が私もPanelたときに起動するChangedイベントが追加される場合があります認証されるかどうかを確認しますそこに含まれている入力の内容に変更があります。このイベントのハンドラをメインフォームに追加します。

再利用可能なユーザーコントロールを作成する場合、これを行うには、サブクラスですべての接続と認証を行い、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

さて、パネルを使ってみよう...実際にはかなり意味があります。私がまだ少し曇っているのは、パネルからの情報をメインプログラムに戻すにはどうすればいいのでしょうか?メインプログラムは、テキストボックスの値が正しく入力された時期を知らないので、Panel内にボタンがある可能性がありますが、ボタンが押されたときにメインボタンはどのように認識されますか?ありがとう!! – Toadums

+0

@Toadumsこの回答が気に入ったら、upvoteして受け入れてください! :-) –

+0

あなたが与えた最初のコードスニペットのように値を渡す方法を理解していますが、問題は、有効な値があるときにメインプログラム(パネルを保持)がどのように知っているかです。 – Toadums

1

はあなたがアプリケーション全体の異なる場所で何度も何度も同じことをやってしようとしているカスタムユーザーコントロールを使用します。たとえば、ユーザーがログイン情報を入力する必要があったアプリ内に複数の場所がある場合は、その機能をカプセル化するようにユーザーコントロールを作成して、ロジックをプログラミングして一度だけ見る必要があります再び。アプリの複雑さは増しますが、冗長コードを書く必要がないことは、わずかな複雑さよりもはるかに大きいです

しかし、特定の機能を1回だけ実行しているところでは、反冗長性の値を追加せずにアプリケーションの複雑さを避ける必要があります。

は私が誰か他の人への質問の「ハウツー」の実装部分を残しておきます。

関連する問題