2014-10-04 75 views
-1

我有文字的標籤內,我可以改變標籤大小和標籤的字體大小,每次檢查很多次,但也許有一種方法來計算的話:我如何計算從pictureBox1的頂部到form1的頂部的距離?

label18.Text = "מכם מזג האוויר איננו פעיל כרגע"; 

這是我看到的文字現在:

Text

紅色的文字是希伯來文,這是我想改變它的大小,並根據picturebox1頂部把它中間沒有左邊喜歡它現在的文本。

,我做一個黑圈只是爲了證明我所說的「發件人pictureBox1的頂部和Form1的幾乎頂部的距離」的意思。 我的意思是這個灰色區域從上面的pictureBox1和頂部的form1白色區域只有這個灰色區域我想在這個高度和中間的文本。 我如何計算這兩個值?

我試過,但它不是在正中間:

Not middle

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; 

回答

4

你不需要圖形或測量任何東西。就在設計師text align = middlecenterautosize = true

label18.Location = new Point(pictureBox1.Location.X + (pictureBox1.Width/2 - label18.Width/2, 
          pictureBox1.Location.Y - label18.Height); 
+0

試過它不工作。在所有的答案它不是在中間,當我設置標籤屬性自動大小爲false,然後它在中間,但文本是裏面它不是傳播我的意思是你沒有看到所有的文字只有第一個字。但是它在中間。 – 2014-10-04 15:20:20

+0

@JamesAharon它的工作原理。只需將autosize設置爲true即可符合文本! – 2014-10-04 15:22:39

+0

你不能使label18.Location.X =你得到:Error 無法修改'System.Windows.Forms.Control.Location'的返回值,因爲它不是一個變量所以,也許我需要使用新的點(....? – 2014-10-04 15:28:52

-1

有實現這一目標的一個以上的方式。

我建議如下:將PictureBox的

  1. 首先計算出的PictureBox的(picturebox.Width)寬度
  2. 查找窗體上的座標,其中PictureBox的所在(picturebox.Location)財產)
  3. 然後您更改標籤控件的位置 - >到Label.Location.X =(picturebox.Width/2)和Label.Location.Y = picturebox.Location.Y ==>現在你有標籤正確放置。
  4. 下一集合的標籤控制到頂部(在形式和圖片框的邊緣之間的距離)的高度在PictureBox的值。

從那裏,我打字所以不能做全職的代碼示例沒有視覺studion。

你完成了。

2

要居中你需要得到它的實際大小的標籤,然後用另一個控制使用一些簡單的數學來獲取該控件的座標中心(參見下文實施例1)。我不知道灰色條是什麼控件,但可以使用size.Width屬性並執行相同類型的計算。

如果您想填充灰色條,我已經添加了示例2。

實施例1:

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; 
} 

實施例2

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;    
} 
+0

凱文接近有MUT是計算它的方式設定所以每次我改變它會在中間的文本的大小。即使我不改變文字大小。關了。 (用你的解決方案的圖像更新我的問題)。 – 2014-10-04 14:55:49

+0

凱文,你忘了添加greyBar變量。我沒有任何greyBar變量。 – 2014-10-04 15:17:02

+0

您添加了+ pictureBox1.Left;到計算?如果這不起作用,下面的其他建議也很合理。 – Kevin 2014-10-04 15:18:52

1

這是與Windows形式相對簡單:

  1. 基座中的標籤的形式的頂部通過在th中設置適當的屬性e表單設計師。您要設置的財產是Dock,它應該設置爲Top
  2. 將標籤的AutoSize屬性更改爲false
  3. 根據需要更改標籤的高度。
  4. 將標籤的TextAlign屬性更改爲MiddleCentre

應該這樣做。