4

私は C# を学んでおり、本からの演習の一環として、フォーム内でラベルを中央に配置する必要があります。フォームが大きいかどうかは問題ではありません。ここで-stackoverflowで-他のいくつかの場所で異なるソリューションを見つけ、2つに絞り込みました。しかし、非常に人気のあるソリューションにもかかわらず、同じ結果が得られないようです。

その 方法1のようです

myLabel.Left = (this.ClientSize.Width - myLabel.Width) / 2;
myLabel.Top = (this.ClientSize.Height - myLabel.Height) / 2;

ラベルをわずかに左側中央に配置し、中央から上にオフセットし、その 方法 2を作成します。

myLabel2.Dock = DockStyle.Fill;
myLabel2.TextAlign = ContentAlignment.MiddleCenter;

フォームの真ん中で完全に整列させます。

さて、私の質問は、なぜ違いがあるのか​​ 、言い換えれば、なぜ方法1に左サイドアップのオフセットがあるのですか?

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

//Exercise 16.1
//-------------------
using System.Drawing;
using System.Windows.Forms;

public class frmApp : Form
{
    public frmApp(string str)
    {
        InitializeComponent(str);
    }

    private void InitializeComponent(string str)
    {
        this.BackColor = Color.LightGray;
        this.Text = str;
        //this.FormBorderStyle = FormBorderStyle.Sizable;
        this.FormBorderStyle = FormBorderStyle.FixedSingle;
        this.StartPosition = FormStartPosition.CenterScreen;

        Label myLabel = new Label();
        myLabel.Text = str;
        myLabel.ForeColor = Color.Red;
        myLabel.AutoSize = true;
        myLabel.Left = (this.ClientSize.Width - myLabel.Width) / 2;
        myLabel.Top = (this.ClientSize.Height - myLabel.Height) / 2;

        Label myLabel2 = new Label();
        myLabel2.Text = str;
        myLabel2.ForeColor = Color.Blue;
        myLabel2.AutoSize = false;
        myLabel2.Dock = DockStyle.Fill;
        myLabel2.TextAlign = ContentAlignment.MiddleCenter;

        this.Controls.Add(myLabel);
        this.Controls.Add(myLabel2);
    }

    public static void Main()
    {
        Application.Run(new frmApp("Hello World!"));
    }
}
4

1 に答える 1