C# 如何计算从pictureBox1顶部到form1顶部的距离?

C# 如何计算从pictureBox1顶部到form1顶部的距离?,c#,.net,winforms,C#,.net,Winforms,我有一个内有文本的标签,我可以每次更改标签大小或标签字体大小并检查多次,但可能有一种方法可以计算它: label18.Text = "מכם מזג האוויר איננו פעיל כרגע"; 这就是我现在对文本的看法: 红色的文本在希伯来文中,这是文本,我想改变它的大小,并把它放在中间,根据图片BOX1顶部,而不是在左边,就像现在一样。 我画了一个黑色的圆圈,只是为了显示我所说的从pictureBox1顶部到form1顶部的距离。 我的意思是这个灰色区域从上面的图片BOX1和上面的Fr

我有一个内有文本的标签,我可以每次更改标签大小或标签字体大小并检查多次,但可能有一种方法可以计算它:

label18.Text = "מכם מזג האוויר איננו פעיל כרגע";
这就是我现在对文本的看法:

红色的文本在希伯来文中,这是文本,我想改变它的大小,并把它放在中间,根据图片BOX1顶部,而不是在左边,就像现在一样。 我画了一个黑色的圆圈,只是为了显示我所说的从pictureBox1顶部到form1顶部的距离。 我的意思是这个灰色区域从上面的图片BOX1和上面的Frim1白色区域只有这个灰色区域我想让文本在这个高度和中间。 如何计算这两个值

我试过这个,但不在中间:

SizeF size = label18.CreateGraphics().MeasureString(label18.Text, label18.Font);
label18.Left = (pictureBox1.Width / 2) - (((int)size.Width) / 2) + pictureBox1.Left;
label18.Top = pictureBox1.Top - 20;

实现这一目标的方法不止一种

我建议如下:

首先计算picturebox的宽度picturebox.width 查找picturebox所在窗体上的坐标picturebox.Location属性 然后将标签控件->的位置更改为label.location.X=picturebox.Width/2和label.location.Y=picturebox.location.Y=>现在标签已正确放置。 接下来,将Label控件的高度设置为窗体边缘与picturebox的picturebox值之间的Topdistance。 没有从我输入的地方进行可视化研究,因此无法完成完整的代码示例


你完了

要使标签居中,您需要得到它的实际大小,然后使用另一个控件使其居中,请使用一些简单的数学来获得控件的坐标,请参见下面的示例1。我不知道灰色条的控制是什么,但是你可以通过使用size.Width属性和进行相同类型的计算来居中控制

如果您想填充灰色条,我添加了示例2

例1:

例2


对于Windows窗体,这相对简单:

通过在窗体设计器中设置适当的属性,将标签固定到窗体顶部。要设置的属性为Dock,应设置为Top。 将标签的“自动调整大小”属性更改为false。 根据需要更改标签的高度。 将标签的TextAlign属性更改为MiddleCenter。
应该可以了。

您不需要图形或测量任何东西。只需在designer text align=middlecenter和autosize=true中设置


凯文关闭那里有一种方法来计算它,所以每次我改变文本的大小,它将在中间。即使我没有改变文本大小。很近。用您的解决方案的图像更新了我的问题。Kevin您忘了添加greyBar变量。我没有任何greyBar变量。是否添加了+pictureBox1.Left;怎么计算?如果这不起作用,下面的其他建议听起来也很合理。没有看到你的表单和灰条是如何实现的,我做了一些示例代码。你必须根据你实现表单的方式进行调整。Kevin好的,我的错误现在我看到灰色部分是我在设计器中添加到表单中的菜单。因此,灰色部分是图片BOX1顶部与菜单LIP1之间的距离。尝试使其不起作用。在所有答案中,它不在中间,当我将标签属性自动大小设置为false时,它在中间,但是文本在里面,它不是传播的,我的意思是你没有看到所有的文本只有第一个单词。但是它在中间。只需将autosize设置为true以适合文本!无法使label18.Location.X=您得到:错误32无法修改“System.Windows.Forms.Control.Location”的返回值,因为它不是变量,所以可能需要使用新点@是的,你是对的。我没有visual studio来测试它。请参见编辑@γηράσκωδ'αεπολλάδασκμε谢谢您的评论
private void CenterLabel()
{
    //get the size of the text (you could do this before hand if needed)
    SizeF size = label18.CreateGraphics().MeasureString(label18.Text, label18.Font);

    //center over picture box control and slightly above
    label18.Left = (pictureBox1.Width / 2) - (((int)size.Width) / 2)  + pictureBox1.Left;
    label18.Top = pictureBox1.Top - 20;
}
private void CenterLabel()
{
    int fontHeightPixels = (int)(greyBar.Height * .85);
    Font font = new System.Drawing.Font("Arial", fontHeightPixels, FontStyle.Regular, GraphicsUnit.Pixel);

    string text = "I am centered";

    //get the size of the text (you could do this before hand if needed)
    SizeF size = label18.CreateGraphics().MeasureString(text, font);

    label18.Font = font;
    label18.Text = text;

    //center over picture box control and slightly above
    label18.Left = (pictureBox1.Width / 2) - (((int)size.Width) / 2) + pictureBox1.Left;
    label18.Top = (greyBar.Height / 2) - (((int)size.Height) / 2) + greyBar.Top;            
}
label18.Location = new Point(pictureBox1.Location.X + (pictureBox1.Width / 2 - label18.Width / 2, 
                             pictureBox1.Location.Y - label18.Height);