2009-01-16 12 views
23

Böyle bir dizesi vardır:Bir dize uzunluğunu bir piksel birimine nasıl dönüştürebilirim?

string s = "This is my string"; 

Bir Telerik rapor oluşturma ve benim dize genişliği olan bir textbox tanımlamanız gerekir. Bununla birlikte, boyut özelliğinin bir Birim olarak ayarlanması gerekir (Piksel, Nokta, İnç, vb.). Dize uzunluğumu nasıl değiştirebilirim, bir Piksel söyle, ben de genişliğini ayarlayabilir miyim?

DÜZENLEME: itiraz grafiklere bir başvuru alma denedi, ama bu Telerik.Reporting.Report devralan bir sınıf içinde yapılır.

cevap

52

Bu durumda

Using graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(New Bitmap(1, 1)) 
    Dim size As SizeF = graphics.MeasureString("Hello there", New Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point)) 
End Using 
+2

MeasureString'in statik bir yöntem olması gerektiğini düşündüğümden. Bu dikkate mevcut grafik dönüşümü alır, çünkü – Kibbee

+1

@Kibbee 'MeasureString' bir 'Graphics' gerektirir. –

3

Grafik nesnesinin bir örneğini, MeasureString() yöntemini kullanarak oluşturabilirsiniz. Ama bunu yazı tipi adını, yazı tipi boyutu ve diğer bilgileri geçmelisiniz.

+0

ben MeasureString yöntemine baktım vb yazı tipi adını, boyutunu, ama bir Grafik referans nesne oluşturmak anlamaya olamaz. Bir form veya kontrolüm yok, sadece bir sınıfa bunu anlamaya çalışıyorum. – ScottG

3

Yazı tipine de bağlı. Dize uzunluğu yeterli değil.

using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(new Bitmap(1, 1))) 
{ 
    SizeF size = graphics.MeasureString("Hello there", new Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point)); 
} 

Veya VB.Net'te: Bir kontrol veya formun kullanmadan

15
Size textSize = TextRenderer.MeasureText("How long am I?", font); 
3

, ben genellikle kirli ama basit bir yöntemdir:

  • olan görünmez bir Label ekliyorummülk - kirli çalışma -. Belirli bir dize için Width olmasını istediğinizde
  • , ben Label.Text olarak ayarlayın.
  • Label ait Width bana doğru değeri verecektir.
+1

Bro kadar SMART! – 3bdalla

+0

bir litle inneficient ama aslında ... AKILLI! –

İlgili konular