System.Drawing.Graphics
방법 MeasureString
문자열 너비에 몇 가지 추가 픽셀이 포함되어 있기 때문에 (그 이유는 모르겠 음) 고정 너비를 측정합니다. -length 문자를 사용 가능한 최대 너비로 나누면 최대 너비에 맞출 수있는 문자 수를 너무 낮게 추정 할 수 있습니다.
문자의 최대 수를 얻으려면, 당신은 다음과 같이 반복적 인 일을해야 할 것 :
using (Graphics g = this.CreateGraphics())
{
string s = "";
SizeF size;
int numberOfCharacters = 0;
float maxWidth = 50;
while (true)
{
s += "a";
size = g.MeasureString(s, this.Font);
if (size.Width > maxWidth)
{
break;
}
numberOfCharacters++;
}
// numberOfCharacters will now contain your max string length
}
업데이트을 : 당신은 뭔가 새로운 것을 매일 배웁니다. Graphics.MeasureString (및 TextRenderer)는 돌출 된 글리프를 수용하기 위해 경계를 몇 개의 추가 픽셀로 채 웁니다. 의미가 있지만, 성가 시게 될 수 있습니다. 참조 :
http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx이 작업을 수행 할 수있는 더 좋은 방법처럼 보이는 것은 :
그래서, 또한 다른 결과 (이 창 컨트롤을 그릴 때 사용되는 무엇인가를 생산
TextRenderer.MeasureText(),이
using (Graphics g = this.CreateGraphics())
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
SizeF size = g.MeasureString("a", this.Font, new PointF(0, 0),
StringFormat.GenericTypographic);
float maxWidth = 50; // or whatever
int numberOfCharacters = (int)(maxWidth/size.Width);
}
정보를 주셔서 감사합니다. Consolas 글꼴을 사용했지만 사용하는 문자에 따라 "numberOfCharacters"가 반환되었지만 매우 가까이에있는 것을 사용했습니다. 예 : "a"가 50을 반환하면, ""을 사용하면 다른 숫자가 반환됩니다. 나는 Consolas가 Fixed Font - Monospaced라고 생각 했단 말인가? –
마침내 나는 등 폭이 같은 글꼴을 사용하여 다른 문자의 너비와 동일한 값을 얻습니다. 그러나 '- space'는 이상한 '-3.813766E-7' 음수 값을 제공합니다. 어떤 충고? – Gondil
@ Gondil : 이상한 결과이지만 모노 스페이스 글꼴을 사용하고 있기 때문에 문제가되지 않습니까? "m"(예를 들어) 너비를 측정하고이를 모든 문자 (공백 포함)의 너비로 사용할 수 있습니다. – MusiGenesis