문제

Textrenderer.measureText를 측정하기 위해 텍스트를 제공하고 사용하는 폭을 제공하면 해당 텍스트를 표시하는 데 필요한 높이를 반환합니다.

private static int CalculateHeight(string text, Font font, int width)
{
    Size size = TextRenderer.MeasureText(text, font, new Size(width, Int32.MaxValue), TextFormatFlags.NoClipping | TextFormatFlags.WordBreak);
    return size.Height;
}

그 텍스트, 너비 및 높이를 LinkLabel에 주면 텍스트가 너비와 높이로 표시되지 않으면 텍스트가 표시됩니다.

그러나 LinkLabel.Links Collection에 링크를 넣으면 LinkLabel은 문자 사이에 약간 더 간격이있는 것으로 보이는 텍스트를 그립니다. 때때로 텍스트의 끝이 클리핑됩니다. 어쨌든 이것을 막을 수 있습니까? 링크가있을 때 패딩을 추가하려고 시도했지만 얼마나 많은 공간이 필요한지 정확히 알 수있는 신뢰할 수있는 방법은 없습니다. 이 작업을 수행 할 다른 방법이 있습니까?

도움이 되었습니까?

해결책

당신은 사용해야합니다 Control.getPreferredSize 제어에 필요한 너비 또는 높이를 계산하는 방법 (경우 링크 라벨). 그러한 목적으로 MeasureText를 사용해서는 안됩니다. 더 자세한 설명을 찾을 수 있습니다. 여기 (Textrenderer.MeasUreText 결과의 정확도).

다른 팁

만약 LinkLabel 둘 이상의 링크가 포함되거나 링크에 또는 링크에있는 텍스트의 일부가있는 다음 제어가 사용합니다. Graphics.DrawString/MeasureString 대신에 TextRenderer.DrawText/MeasureText. 당신은 그것을 쉽게 실제로 볼 수 있습니다. 렌더링의 가장 큰 차이점은 작은 L 문자입니다.

linkLabel1.Text = new string('l', 100); // 100 x small L
linkLabel1.LinkArea = new LinkArea(0, 50);
linkLabel2.Text = new string('l', 100); // 100 x small L 

Textrenderer.measuretext는 관리하는 래퍼입니다 DrawTexTex API. 반환 된 값은 LPRC 구조물에서 나옵니다. 자세한 내용은 해당 API를보고 싶을 수도 있습니다.

밑줄로 만드는 스타일을 제거 할 수 있다고 생각합니다. linkLabel.Styles.Add("text-decoration", "none"); 그러나 물론 그것은 링크처럼 보이지 않을 것입니다. :-/

또 다른 해결책은 패딩을 직접 추가하는 것입니다.

int heightBefore = linkLabel.Height;
int fontHeight = CalculateHeight(linkLabel.Text, linkLabel.Font, linkLabel.Width);
int paddingHeight = heightBefore - fontHeight;
linkLabel.Font = otherFont;
linkLabel.Height = CalculateHeight(linkLabel.Text, otherFont, linkLabel.Width);
linkLabel.Height += paddingHeight;

가장 예쁜 솔루션은 아니지만 효과가 있다고 생각합니다.

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