6

実行時に 2 つのコントロールを動的に追加していますが、最初に作成されたコントロールのみが表示されます。

コードは次のとおりです。

Label tempLab = new Label();
tempLab.text = "Test Label";
MyControl.Controls.Add(tempLab);
tempLab.Location = new Point(5,5);

Button tempBut = newButton()
tempBut.text = "Test Button";
MyControl.Controls.Add(tempBut);
tempBut.Location = new Point(20,20);

コピペではないので、大文字の構文エラーは無視してください。 何か案は ?

それらはグループボックスに追加されています。それらをパネルまたはフォームに追加しようとしましたが、同じ問題が発生します。イベント ハンドラーは必要ないので、その要件について言及しないでください。

4

4 に答える 4

8

私はすぐにあなたのコードをWindowsフォームコンストラクターに貼り付けてみました。正常に動作しますが、サイズが大きいため、ラベルがボタンとわずかに重なっています。あなたはそれを自動サイズにしたいかもしれません:

Label tempLab = new Label();
tempLab.Text = "Test Label";
tempLab.AutoSize = true;
Controls.Add(tempLab);
tempLab.Location = new Point(5,5);

Button tempBut = new Button();
tempBut.Text = "Test Button";
Controls.Add(tempBut);
tempBut.Location = new Point(20,20);

あっ、そういえば。MyControlをPanelまたはGroupBoxとして使用しているとのことですが。MyControlもControlsコレクションに追加していることを確認してください。

于 2013-02-20T21:21:48.850 に答える
2

場所には、いわば平らな線になって見えないサイズがないようです。これtempBut.Location = new Point(20,20);に変更してみてください

this.tempBut.Location = new System.Drawing.Point(20,20); 
this.tempBut.Size = new System.Drawing.Size(30, 15); 
于 2013-02-20T21:43:31.517 に答える
1

お役に立てれば。MyTextBoxの配列をパネルに追加しています。

         Point prevlocation = new Point(0,0);
         foreach (object key in keys)  //List of Objects or which make new controls
         {


            MyTextBoxControlArray[i] = new MyTextBoxUserControl(key);   //User control but could be any control like textbox etc
            MyTextBoxControlArray[i].Width = this.panel1.Width - 50;
            MyTextBoxControlArray[i].AutoSize = true;
            MyTextBoxControlArray[i].InfoLoad += new MyTextBoxUserControl.InfoLoadEventHandler(Form1_InfoLoad);

            if (i == 0)
            {
                //first control
                prevlocation.Y += 3;
                prevlocation.X += 3;
                MyTextBoxControlArray[i].Location = prevlocation;
            }
            else
            {
            //adjsuting height and width
                MyTextBoxControlArray[i].Location = new System.Drawing.Point(
                             prevlocation.X,
                             prevlocation.Y + MyTextBoxControlArray[i].Height+3);
            }

            prevlocation = MyTextBoxControlArray[i].Location;

            i++;
        }

        this.panel1.Controls.AddRange(MyTextBoxControlArray); //in panel i can add a array of controls , but this could be done one by one
于 2013-02-20T22:04:57.613 に答える
0
  string sql3 = "SELECT COUNT(*) from systeminfo";//counting no of element
        n = dm.countelement(sql3);
        int i, c = 1;
        int m = 100;

        for (i = 0; i < n; i++, c++)
        {
            sql3 = " SELECT Company_name FROM systeminfo LIMIT " + (i + 1) + " OFFSET " + i + "";
            string cname = dm.getlang(sql3);

            PictureBox pb = new PictureBox();
            Label lb = new Label();
           pb.Location = new System.Drawing.Point(m, 30 + (30 * i));
           lb.Location = new System.Drawing.Point(m-30, 30 + ((30 * i)-30));
           pb.Name = "p" + c;
           lb.Name = "l" + c;
           lb.Size = new System.Drawing.Size(100, 20);
           pb.Size = new System.Drawing.Size(30, 30);
           lb.Text = cname;
           lb.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
           lb.BackColor = Color.Transparent;
           pb.ImageLocation = @"..\image\image.jpg";
           pb.MouseDown += new         System.Windows.Forms.MouseEventHandler(this.picmap1_MouseDown_1);
           pb.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picmap1_MouseMove_1);
           pb.MouseUp += new System.Windows.Forms.MouseEventHandler(this.picmap1_MouseUp_1);

            picmap1.Controls.Add(pb);
            picmap1.Controls.Add(lb);
            c++;

        }

private void picmap1_MouseMove_1(オブジェクト送信者, MouseEventArgs e) { var c = PictureBox としての送信者;

        if (!_dragging || null == c) return;
        c.Top = e.Y + c.Top - _yPos;
        c.Left = e.X + c.Left - _xPos;
        foreach (Control d in picmap1.Controls)
            if (d is Label)
            {

                d.Top = e.Y + d.Top - _yPos;
                d.Left = e.X + d.Left - _xPos;

            }
    }

    private void picmap1_MouseUp_1(object sender, MouseEventArgs e)
    {
        var c = sender as PictureBox;
        if (null == c) return;
        _dragging = false;
    }

    private void picmap1_MouseDown_1(object sender, MouseEventArgs e)
    {

        if (e.Button != MouseButtons.Left) return;
        _dragging = true;
        _xPos = e.X;
        _yPos = e.Y;
        foreach (Control d in picmap1.Controls)
            if (d is Label)
            {

                _xPos = e.X;
                _yPos = e.Y;

            }
    }

これは、マウスドラッグで移動する動的追加コントロールの例です

于 2015-06-09T05:59:40.243 に答える