런타임에 GroupBox를 만들고 Text 속성을 설정하고 있습니다. 일반적으로 텍스트는 한 줄에 있지만 때로는 줄 바꿈됩니다. 문제는 GroupBox에 포함 된 컨트롤이 GroupBox의 텍스트를 덮고 있다는 것입니다.System.Windows.Forms.GroupBox의 텍스트가 다음 줄로 넘어갈 때 어떻게 알 수 있습니까?
내가 원하는 것은 텍스트의 줄 바꿈 여부와시기를 결정하는 것입니다. 특히, 줄 바꿈 된 텍스트가 한 줄에 비해 얼마나 많은 추가 높이를 차지하는 지 결정하고 싶습니다. 이렇게하면 GroupBox의 컨트롤을 재배치하고 높이를 조정할 수 있습니다.
처음에는 GroupBox의 CreateGraphics()
메서드를 호출하고 Graphics를 사용하여 문자열을 측정한다고 생각했습니다. 이런 식으로 뭔가가 :
private void SetGroupBoxText(GroupBox grp, string text)
{
const int somePadding = 10;
Graphics g = grp.CreateGraphics();
SizeF textSize = g.MeasureString(text, grp.Font);
if (textSize.Width > (grp.Width - somePadding))
{
// Adjust height, etc.
}
}
문제는 g.MeasureString(text, grp.Font)
에 의해 생성 된 크기가 정확하지 않는 것이다. 랩을 일으키기에 충분한 단일 문자를 넣은 다음 결과 문자열을 측정하여 정확하지 않다고 판단했습니다.
예를 들어 랩이 발생할 때까지 86 개의 파이프 (|)가 필요했습니다. 그 줄을 측정했을 때 폭은 ~ 253이었습니다. 랩을 강요하는 데 16 자본금이 필요했습니다. 스트링의 너비는 ~ 164였습니다. 이것들은 제가 테스트 한 두 극단이었습니다. 내 GroupBox의 너비는 189입니다. (29 일 걸리고 너비가 ~ 180이었고, O가 22를 가지고 너비가 ~ 189였습니다)
누구 아이디어가 있습니까? (해킹, WinAPI 등 환영 솔루션입니다)
이것은 완벽합니다. – fre0n