私は 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!"));
}
}