0

複数行テキストのスクリーン ショット
私は usercontrolpanel を含むを持っています。これにはTextboxes、名前用とコメント用の 2 つのセットが含まれています。Textboxes を動的に作成してから、コメントにtextbox使用するものを非表示にします。

on clickここではeventを表示できません。 という関数を使用してみTextbox()ましたが、最初の行だけにコメント ボックスが追加されます。

これは、テキストボックスを作成するためのコードですusercontrol

public void Textbox()
{
   TextBox[] tb1 = new TextBox[10];
   for (int i = 0; i < 7; i++)
   {
     tb1[i] = new TextBox();
     tb1[i].Multiline = true;
     tb1[i].Height = 10;
     tb1[i].Name = i.ToString();
     tb1[i].Location = new Point(250 + i * 90, 82);
     tb1[i].Size = new System.Drawing.Size(80, 40);
     rowpanel.Controls.Add(tb1[i]);
   }
}

次はこうする

private void comment_btn_Click(object sender, EventArgs e)
{
   add.Textbox();
}

クリック comment_btnすると、コメント テキスト ボックスが最初の行に追加されます。 add私ですusercontrol

図に示すように、追加をクリックすると、複数行のテキストボックスが最初の行にのみ追加され、パネルに表示されるすべての行に追加したいのですが、どうやってそれを行うのかわかりません。

4

1 に答える 1

1

最初の行のテキストボックスのみを生成すると言いましたが、動的に生成されたコメントテキストボックスが複数の行に表示されることを期待していることを示していますか?

そこにあるコードは、複数の列の同じ行にテキスト ボックスを生成します。7 つすべてのテキスト ボックスが正しく生成されている可能性がありますが、2 つ目以降がパネルの境界外にあるため、最初のテキスト ボックスしか表示されません。

ロケーション ラインを

tb1[i].Location = new Point(250, 82 + i * 50);

複数の列ではなく複数の行にテキストボックスを生成し、うまくいけばあなたが求めているものを表示します。- スクリーンショットの追加は、上記が問題ではないことを示しています。

編集:コントロールのこれらの行のそれぞれがユーザー コントロールのインスタンスである場合、現在Textbox()、それらの 1 つのメソッドのみを呼び出しているため、1 行のみが追加されています。作成したすべてのコントロールでcomment_btn_Clickメソッドを呼び出すループをメソッドに追加する必要があります。Textbox()

たとえば、ユーザー コントロールのコレクションが show_pnl というパネルにあり、ユーザー コントロールのタイプが TimeRecordingControl であると仮定します。

private void comment_btn_Click(object sender, EventArgs e)
{
    foreach(Control control in show_pnl.Controls)
    {
        TimeRecordingControl timeRecordingControl = control as TimeRecordingControl;

        if(timeRecordingControl != null)
        {
            timeRecordingControl.Textbox();
        }
    }
}

また、単に:)CreateTextboxesForCommentsではなく、メソッドが何をするかを示す方法でメソッドに名前を付けることを検討してください。Textbox

于 2013-01-04T10:23:56.730 に答える