0

フォームにパネルを生成する次のメソッドがあります。

private void createPanels(int spacing)
        {
            pnl1.Location = new Point(0, spacing);
            pnl1.BorderStyle = BorderStyle.FixedSingle;
            pnl1.Size = new Size(100, 93);
            tabRotaBuild.Controls.Add( pnl1);

        }

次に、フォームロードでこのメソッドを呼び出します。

   private void Form1_Load(object sender, EventArgs e)
    {
        createPanels(60);            
    }

次にやりたいのは、既存のパネルをクリアせずに、このパネル(新しいパネル)をその下に再度表示することです。クリックすると新しいパネルを生成するボタンがありますが、クリックすると、新しいパネルが表示されると既存のパネルが消えます。

これはボタンの背後にあるコードです:

int s = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            s += 100;
            createPanels(s);

        }
4

1 に答える 1

2

メソッドを確認してください。既存の場所PanelとControl.Addメソッドの場所を変更するだけで、Parentプロパティが再度設定されBorderStyleSize すでに同じ値に設定されています。

private void createPanels(int spacing)
        {
            pnl1.Location = new Point(0, spacing); //notice here
            pnl1.BorderStyle = BorderStyle.FixedSingle;
            pnl1.Size = new Size(100, 93);
            tabRotaBuild.Controls.Add( pnl1);

        }

メソッド内に新しいPanel 追加を作成する必要がありますpnl1 = new Panel();

private void createPanels(int spacing)
    {
        pnl1 = new Panel();
        pnl1.Location = new Point(0, spacing);
        pnl1.BorderStyle = BorderStyle.FixedSingle;
        pnl1.Size = new Size(100, 93);
        tabRotaBuild.Controls.Add( pnl1);

    }

または、メソッド内で新しいパネルを宣言してインスタンス化することもできます

Panel panel = new Panel();

追加されたパネルに参照がないことに注意してください。List<Panel>メソッドの外部で宣言されたものなどに各参照を追加できます。

于 2013-03-07T22:52:09.560 に答える