1

「子を追加」という名前のフォームを作成しました。そのフォームで、ユーザーが持っている子供を選択できないコンボボックスをドロップしました。最初に、子供の名前を取得するためのテキストボックス、子供の生年月日を取得するための 3 つのコンボボックス、および子供の血液型用のもう 1 つのボックスを含むパネルがあります。今私が欲しいのは、ユーザーが子の数を選択すると、選択した数に応じて実行時に同じパネルが上下に追加されることです。

単純にコントロールを追加するには、次のようにコーディングすることを知っています

 private void addchildbtn_Click(object sender, EventArgs e)
        {
            Button btn = new Button();

            this.Controls.Add(btn);
        }

同じ要素を含む同じタイプのパネルを上下に追加する必要がある場合はどうすればよいですか。私は間違っているこのコーディングをしました

private void addchildbtn_Click(object sender, EventArgs e)
        {
            childpnl pnl = new childpnln();

            this.Controls.Add(pnl);
        }

また、実行時に追加されたコントロールを介してデータベースにデータを送信したいと考えています。では、これらのコントロールに名前を付けて、データベースのコーディングを行う方法について説明します。助けてください

4

2 に答える 2

1
    public int childrenCount; //The number of children

    private void button1_Click(object sender, EventArgs e) { //Adds a child
        childrenCount++;
        Panel p = new Panel();
        p.Location = new Point(10, (childrenCount - 1) * 200);
        p.Width = 300;
        p.Height = 200;
        p.BorderStyle = BorderStyle.Fixed3D;
        TextBox tName = new TextBox(); //TextBox for the name
        tName.Location = new Point(200, 20);
        tName.Text = "name";
        MonthCalendar calendar = new MonthCalendar(); //Calendar to choose the birth date
        TextBox bloodGroup = new TextBox(); //TextBox for the blood group
        bloodGroup.Location = new Point(200, 50);
        bloodGroup.Text = "blood group";
        p.Controls.Add(tName);
        p.Controls.Add(calendar);
        p.Controls.Add(bloodGroup);
        this.Controls.Add(p);
    }

    private void button2_Click(object sender, EventArgs e) { //Checks the values
        string message = "";
        foreach(Control c in this.Controls) { //loop throught the elements of the form
            if (c.GetType() == typeof(Panel)) { //check if the control is a Panel
                //Get the values from the input fields and add it to the message string
                Panel p = (Panel)c;
                TextBox tName = (TextBox)(c.Controls[0]);
                MonthCalendar calendar = (MonthCalendar)(c.Controls[1]);
                TextBox bloodGroup = (TextBox)(c.Controls[2]);
                message += tName.Text + ":\n";
                message += "birth date: " + calendar.SelectionStart.ToShortDateString() + "\n";
                message += "blood group: " + bloodGroup.Text + "\n\n";
            }
        }
        //show the message string in a MessageBox
        MessageBox.Show(message);
    }

例:

ジャックという名前の子供、生年月日が 2013 年 4 月 28 日、血液型が A+ の子供を追加すると、結果は次のようになります。

ジャック:

生年月日: 28.4.2013

血液型:A+

(注: 他の文化を使用している場合、日付文字列は変更される可能性があります)

于 2013-04-28T09:33:32.960 に答える
0

そのようにパネルを追加すると、正しく見えます。他に何か問題を引き起こしている可能性があります。エラーがなければ、言うのは難しいです。

2 番目の部分については、コントロールからデータベースにデータを送信する場合は、コード内でデータベース コードを処理しないでください。データベース呼び出しを処理するデータ アクセス層を作成します。

ユーザー コントロールに、データを取得できるパブリック プロパティを与えるか、ユーザー コントロールの関数またはプロパティから返すことができるモデルを作成します。次に、このモデルをデータ アクセス レイヤーと組み合わせて使用​​し、必要に応じてデータベースを更新する必要があります。

メイン フォームまたはメイン フォームのモデル (または、そのルートに行った場合はコントローラー クラス) で、コントロールから DAL、Db までのデータ管理を調整します。

于 2013-04-28T08:58:03.457 に答える