문제

내 글꼴의 단위로 픽셀을 사용하고 있습니다.한 곳에서는 사용자가 화면에 있는 일부 텍스트의 경계 사각형 내부를 클릭했는지 확인하기 위해 적중 테스트를 수행하고 있습니다.다음과 같은 것을 사용해야합니다 MeasureString 이를 위해.불행하게도 적중 테스트를 수행하는 코드는 Graphics 물건이나 심지어 Control.

글꼴을 사용하지 않고 글꼴이 지정된 문자열의 경계 상자를 얻는 방법은 무엇입니까? Graphics 수업?왜 나한테는 Graphics 내 글꼴이 픽셀 단위일 때 개체가 표시됩니까?

도움이 되었습니까?

해결책

System.windows.forms에 대한 참조가있는 경우 Textrenderer 클래스를 사용해보십시오. 문자열과 글꼴을 가져 와서 크기를 반환하는 정적 메소드 (MeasureText)가 있습니다. MSDN 링크

다른 팁

측정을 수행하기 위해 렌더링하는 데 사용하는 그래픽 개체를 사용할 필요가 없습니다.정적 유틸리티 클래스를 만들 수 있습니다.

public static class GraphicsHelper
{
    public static SizeF MeasureString(string s, Font font)
    {
        SizeF result;
        using (var image = new Bitmap(1, 1))
        {
            using (var g = Graphics.FromImage(image))
            {
                result = g.MeasureString(s, font);
            }
        }

        return result;
    }
}

상황에 따라 비트맵의 dpi도 설정하는 것이 유용할 수 있습니다.

MeasureString @nerdfury 답변의 방법은 예상보다 더 높은 문자열 너비를 제공합니다. 여기. 물리적 길이 만 측정하려면이 두 줄을 추가하십시오.

g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
result = 
  g.MeasureString(measuredString, font, int.MaxValue, StringFormat.GenericTypographic);

이 예제는 FormattedText의 사용을 보여주는 데 큰 도움이됩니다. FormattedText는 WPF (Windows Presentation Foundation) 응용 프로그램에서 텍스트를 그리기위한 저수준 컨트롤을 제공합니다. 그래픽 객체를 사용하지 않고 특정 글꼴로 문자열의 너비를 측정하는 데 사용할 수 있습니다.

public static float Measure(string text, string fontFamily, float emSize)
{
    FormattedText formatted = new FormattedText(
        item, 
        CultureInfo.CurrentCulture, 
        System.Windows.FlowDirection.LeftToRight, 
        new Typeface(fontFamily), 
        emSize, 
        Brushes.Black);

    return formatted.Width;
}

Windowsbase 및 PresentationCore 라이브러리를 포함하십시오.

이것은 다른 사람들의 반복 일뿐 만 아니라 내 문제도 원치 않는 그래픽 객체였습니다. 위의 좌절감을들은 후 나는 단순히 시도했습니다.

Size proposedSize = new Size(int.MaxValue, int.MaxValue);
TextFormatFlags flags = TextFormatFlags.NoPadding;
Size ressize = TextRenderer.MeasureText(content, cardfont, proposedSize, flags);

(여기서 '콘텐츠'는 글꼴을 측정하고 카드를 사용하는 문자열입니다)

... 그리고 운이 좋았습니다. 결과를 사용하여 VSTO에서 열의 너비를 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top