2

私はC#フォームアプリケーションで作業しています。

テーブルレイアウトパネルをウィンドウにドラッグアンドドロップし、コンポーネントを動的に追加しForm1.Designer.csました。自動生成されたファイルの外部では、コードはForm1.csファイルにあります。

そこで、いくつかのforループを追加して、レイアウトテーブルを埋める必要のあるすべてのコンテンツを追加します。これは正常に完了しました。

問題は、テーブルレイアウトも動的に作成したいということです。そのため、自動生成されたコードをデザイナーファイルからコピーして貼り付け、[デザイン]からd&dテーブルレイアウトを削除しました。

これは私が他のコンポーネントに対して行ったことであり、シームレスに機能しましたが、何らかの理由で、これは機能しません。

期待される結果は、(非表示のレイアウトパネル)にその中のすべてのイメージボックスが表示されることです。

出力は、単に空のウィンドウを示しています。

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

private void paintLayoutTableOnScreen()
    {
        this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
        this.SuspendLayout();
        // 
        // tableLayoutPanel
        // 
        this.tableLayoutPanel.ColumnCount = 6;
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
        this.tableLayoutPanel.Location = new System.Drawing.Point(12, 12);
        this.tableLayoutPanel.Name = "tableLayoutPanel";
        this.tableLayoutPanel.RowCount = 5;
        this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
        this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
        this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
        this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
        this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
        this.tableLayoutPanel.Size = new System.Drawing.Size(992, 460);
        this.tableLayoutPanel.TabIndex = 0;
        this.tableLayoutPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanel_Paint);
    }

そしてすぐ下:

private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;

したがって、コードの場所を変更する前にイメージボックスをスクリーニングするために印刷していたので、問題はここにあると確信しています。したがって、問題はそこにあるはずですが、念のために:

私はpaintLayoutTableOnScreen()次のように呼んでいます:

public Form1()
    {
        InitializeComponent();
        paintLayoutTableOnScreen();
        paintTablesInScreen();//This was already there and worked just fine.
    }

paintTablesInScreen()次のことを行います。

private void paintTablesInScreen()
    {
        for (int i = 0; i < Info.NumberOfColumns; i++)
        {
            for (int j = 0; j < Info.NumberOfRows; j++)
            {
                drawTable(i, j);

            }
        }
    }

およびdrawTable()

private void drawTable(int column, int row)
    {
        int tableNumber = Info.TableNumber(column, row);

        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        this.pictureBox1.Image = Image.FromFile("C:\\Users\\Trufa\\Documents\\Visual Studio 2010\\Projects\\Viernes 7\\table.png");
        this.pictureBox1.Location = new System.Drawing.Point(3, 3);
        this.pictureBox1.Name = "pictureBox" + tableNumber.ToString();
        this.pictureBox1.Tag = tableNumber.ToString();
        this.pictureBox1.Size = new System.Drawing.Size(128, 86);
        this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
        this.pictureBox1.TabIndex = 0;
        this.pictureBox1.TabStop = false;
        this.pictureBox1.Click += new EventHandler(AnyPictureBoxClickHandler);

        this.pictureBox1.Paint+=new PaintEventHandler((sender, e) =>
        {
            e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            e.Graphics.DrawString(tableNumber.ToString(), Font, Brushes.Black, 58, 20);
        });


        this.tableLayoutPanel.Controls.Add(this.pictureBox1, column, row);
    }
4

1 に答える 1

2

フォームのコントロールに TableLayoutPanel を追加していません。つまり、あなたが逃す:

this.Controls.Add(this.tableLayoutPanel);
于 2012-05-30T06:05:08.063 に答える