2

私は C# を使い始めており、さまざまなコントロールを含むフォームを作成しようとしています。物事を単純にするTableLayoutPanelために、フォーマットを処理するために a を使用しています。ただし、すべてのコントロールをそれぞれのセル内に集中させたいと思います。いくつか検索した後、このページを見つけました。これを行うには、設定するだけcontrol.Anchor = AnchorStyles.Noneで、コントロールがセルの中央に配置されることが示されています。

これは確かに非常にうまく機能しますが、奇妙な動作を発見しました。私は今、フォームの作成を開始しているので、上に単純なグラフがあり、その下に 1 つのテキスト ボックスがある完全に必要最小限のフォームです。完了すると、グラフはパネルの最初の行全体を占め、残りのすべてのコントロールはその下に配置されます。

したがって、単純に設定するつもりでしたpanel.SetColumnSpan(graph, 2)(2列の場合)。これは期待どおりに機能しますが、下の TextBox が集中管理されていない点が異なります。

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Form form = new Form();
            form.AutoSize = true;
            form.FormBorderStyle = FormBorderStyle.FixedDialog;

            Chart chart = new Chart();
            chart.Anchor = AnchorStyles.None;
            //...

            TextBox text = new TextBox();
            text.Text = "A";
            text.Anchor = AnchorStyles.None;

            TableLayoutPanel box = new TableLayoutPanel();
            box.AutoSize = true;
            box.RowCount = 2;
            box.ColumnCount = 2;
            box.Controls.Add(chart,0,0);
            box.SetColumnSpan(chart, 2);
            box.Controls.Add(text,0,1);

            form.Controls.Add(box);
            form.ShowDialog();
        }
    }
}

box.SetColumnSpanコメントアウトし た結果は次のとおりです。コメントアウト

そしてそれをアクティブにします:
アクティブ


更新: ColumnSpan(2) を使用して TextBox を設定することもできますが、それはややポイントを超えています。たとえば、2 行目に 2 つの TextBox を配置したい場合は、それぞれのセルの中央に配置する必要があります。

この場合、2 つ目の Textbox を追加します。

        TextBox text2 = new TextBox();
        text2.Text = "B";
        text2.Anchor = AnchorStyles.None;

それをパネルに追加します。

    TableLayoutPanel box = new TableLayoutPanel();
    box.AutoSize = true;
    box.RowCount = 2;
    box.ColumnCount = 2;
    box.Controls.Add(chart,0,0);
    box.SetColumnSpan(chart, 2);
    box.Controls.Add(text,0,1);
    box.Controls.Add(text2, 1, 1);

ただし、やはり結果は満足のいくものではありません。各 Textbox は明らかに「左寄せ」されています。 両方のテキストボックスは左揃えです

4

1 に答える 1

4

更新: コードに列スタイルがありません。このように設定するだけで完了です:

this.box.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.box.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));

テキストボックスをフォーム (TableLayoutPanel) の中央に配置するには、列スパンも 2 に設定します。そうでない場合、テキスト ボックスのサイズによっては、最初の列の中央に配置されます。

this.box.ColumnCount = 2;
this.box.RowCount = 2;
this.box.Controls.Add(this.chart, 0, 0);
this.box.Controls.Add(this.text, 0, 1);

this.box.SetColumnSpan(this.chart, 2);

this.text.Anchor = System.Windows.Forms.AnchorStyles.None;

与える

ここに画像の説明を入力

そしてこれを設定します:

this.box.SetColumnSpan(this.text, 2);

ここに画像の説明を入力

また、テキスト列のスパンはありませんが、テキスト ボックスはあります。

ここに画像の説明を入力

于 2013-03-15T20:42:31.487 に答える