1

Form1 に Panel を、Form2 に Panel を 2 つ作成しました。Form2 でコントロールを設計したいので、それを Form1 内に動的にロードします。アイデアは、VS を使用して任意の数のフォームを設計できるが、フォーム内のパネルを使用して Form1 に動的にロードできるということです。

問題は、form2 が Dataset + Databind を使用し、Form1 にロードされると動作を停止することです。

Form1内で試した方法:

        From2 from2 = new Form2();

        for (int i = 0; i < cf.Form2.Controls.Count; i++)
        {
            panel1.Controls.Add(cf.Form2.Controls[i]);
        }
4

3 に答える 3

2

これは、私があなたの意味を正確に読んだことを前提としています

あなたが発見しているように、そのアプローチは実現可能ではありません。

はるかに優れた方法は、パネルを含むユーザー コントロールを作成することです。ユーザー コントロールでは、データ ソースを入力パラメーターとして受け取る DataBind() というパブリック メソッドを公開し、そのメソッド内でデータをバインドできます。

フォームを動的にロードするよりも、ユーザー コントロールを動的にロードする方が簡単です。

ユーザー コントロールでは、メソッドをそのまま追加するだけです。(必要に応じて、必要に応じてこれを変更します)

public void BindData(System.Data.DataTable t)
{
   GridView1.DataSource = t;
   if(t.Rows.Count > 0)
   {
      FirstNameTextBox.Text = Convert.ToString(t.Rows[0]["FirstName"])
   }
}

あなたのフォームでは、それをそのように呼び出します(もちろん、エラー処理などがあるはずです-これは、私が説明していることを行う方法の最低限の例です.)

System.Data.DataTable t = new System.Data.DataTable;
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.DataAdapter(sql, connectionstring);
ad.Fill(t);

MyUserControl myControl= new MyUserControl();
myControl.BindData(t);
于 2012-10-02T13:05:10.110 に答える
0

他の回答が述べているように、使用する必要がある解決策は、これらのタイプの状況に対してUserControlsを作成することです。実行しようとしていることが機能しない理由は、コントロールが単一のフォームでのみ機能するように特別に設計されているためです。コントロールを複数のフォームに追加しようとすると、1つにしか正常に追加できません。これは、UserControlsにも当てはまります。あなたはしません1つのユーザーコントロールを作成して、それを2つのフォームに追加することができます。ユーザーコントロールの利点は、機能の一部のセクションを作成、初期化、および使用するためのすべてのコードを、フォームとは別の場所に配置できることです。2つの別々のフォームを追加する同じユーザーコントロールの2つの別々のインスタンスを作成する必要があります。利点は、パネルを作成するためのコード、およびパネル内にある、またはパネルを処理するすべてのものが再利用されることです。

于 2012-10-02T13:51:56.283 に答える
0

あなたの言っていることを 100% 理解しているかどうかわからないので、間違っていたら訂正してください。さまざまなフォームから子アイテムをロードして、form1 に動的に表示したいですか? なぜこれをやりたいのかわかりません。

ユーザー コントロールを使用しない理由は、必要に応じてさまざまなユーザー コントロールを作成し、必要に応じてこれらのコントロールを form1 に読み込むことができるからです。

これを行う方法がわからない場合は、プロジェクトを右クリックして、新しい項目を追加し、ユーザー コントロールを追加して、いろいろ試してみてください。

于 2012-10-02T13:10:01.780 に答える