2011-10-10 14 views
8

muszę zbudować funkcję w bibliotece klasy, które miało ciąg i konkretnej czcionki tego napisu następnie uzyskać szerokość napisuJak uzyskać ciąg szerokość

Więc jak mogę uzyskać szerokość graniczny łańcuch ?

+0

Może być scalony z tym: http://stackoverflow.com/questions/5553965/programmatically-measure-string-in-asp-net – digEmAll

+0

Pomiar rozmiaru ciągu dla strony internetowej brzmi wątpliwie. Nie ma sposobu, aby powiedzieć, jaki rozmiar przeglądarka ma wyświetlać czcionkę AFAIK. – davisoa

+0

Określona czcionka nie wystarczy, aby o tym wiedzieć. Musisz również wiedzieć, który renderer wyświetli tekst. Na przykład Apple i MS renderują tekst bardzo różnie i nie zdziwiłbym się, gdyby miało to wpływ na szerokość graficzną tekstu. Jeśli spróbujesz uzyskać szerokość tekstu wyświetlanego w html po stronie serwera (jak sugerują twoje tagi), najprawdopodobniej nie będzie to możliwe. – CodesInChaos

Odpowiedz

12

Możesz uzyskać obiekt Graphics (używając Control.CreateGraphics() na pojemniku, do którego zamierzasz wysłać tekst) i wywołać MeasureString(), aby to zrobić. Jest to dość powszechna technika GDI + .

Więcej informacji z MSDN: http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

+0

AFAIK GDI + pomiary tekstowe są nieco problematyczne. W szczególności, gdy używasz rozmiaru do wyśrodkowania tekstu, który nie działa zgodnie z oczekiwaniami. – CodesInChaos

+0

Używam metody 'MeasureString', a teraz otrzymałem wartość zwracaną z typem SizeF, następnie dostałem go do PointF i wiem teraz szerokość, ale w PointF >>> Potrzebuję go w cm! Próbuję przekonwertować go, ponieważ myślę, że PointF jest jak punkt Postscript, ale myślę, że moja formuła konwersji nie jest poprawna >> tak Jak przekonwertować po uzyskać szerokość poinf! – AshOoO

+1

'PointF' jest po prostu wartością" zmiennoprzecinkową "dla" Punktu "(tj. Wartości nie-integralne). Konwertowanie z punktów na centymetry powinno być wykonalne (punkty-> piksele-> dpi-> cale-> cm?), Ale dlaczego potrzebujesz centymetrów? –

14

Innym sposobem na to jest z TextRenderer i wywołać jegoMeasureString metody, przekazując ciąg i rodzaj czcionki.

MSDN Przykład:

private void MeasureText1(PaintEventArgs e) 
{ 
    String text1 = "Measure this text"; 
    Font arialBold = new Font("Arial", 12.0F); 
    Size textSize = TextRenderer.MeasureText(text1, arialBold); 
    TextRenderer.DrawText(e.Graphics, text1, arialBold, 
     new Rectangle(new Point(10, 10), textSize), Color.Red); 
} 

UWAGA: To jest tylko alternatywnym rozwiązaniem (równie ważny) jednego już wysłana przez @Neil Barnwell (w przypadku jeśli masz już odwołanie do Systemu .Windows.Forms w twoim projekcie, może to być wygodniejsze).

+0

Myślę, że to działa w aplikacja Windows nie jest projektem biblioteki klasowej! – AshOoO

+1

@AshOoO Zgadzam się, to jest to, co na końcu mojej odpowiedzi dotyczy: =) – jadarnel27

+1

Zmierzy to rozmiar tekstu na aktualnym formularzu. Jeśli chcesz zmierzyć rozmiar tekstu, na przykład na wyjściu drukarki, będziesz musiał użyć metody 'e.Graphics.MeasureString (...)'. – AaA

Powiązane problemy