MeasureString проблема
Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.
Пример:
Текст: "Мама мыла раму"
Область: "----------"
Функция вернет 10 символов
Пример:
Текст: "Мама мыла раму" <- между мыла и раму куча пробелов
Область: "----------"
Функция вернет 28 символов :confused: , т.е. войдут все пробелы, почему? Длинна прямоугольника не изменилась.
Вот пример кода:
[vb]
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim StrFrm As StringFormat = StringFormat.GenericTypographic
'Даже если раскоментировать, результат тот-же
'StrFrm.FormatFlags = StringFormatFlags.NoClip Or StringFormatFlags.MeasureTrailingSpaces
'StrFrm.Trimming = StringTrimming.Character
'В этой переменной будет кол-во символов
Dim Count As Integer = 0
e.Graphics.MeasureString("мамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
Debug.Print("Текст-текст-текст: " & Count.ToString)
e.Graphics.MeasureString("мама мама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
Debug.Print("Текст-пробелы-текст: " & Count.ToString)
e.Graphics.MeasureString("мама ", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
Debug.Print("Текст-текст-пробелы: " & Count.ToString)
e.Graphics.MeasureString(" мама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
Debug.Print("пробелы-текст-текст: " & Count.ToString)
e.Graphics.MeasureString(" мамамама ", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
Debug.Print("пробелы-текст-пробелы: " & Count.ToString)
End Sub
[/vb]
И вот результаты из Debug:
Текст-текст-текст: 8 <- тут ясно он культурно по символам обрезал, вот столько должно влазить 8
Текст-пробелы-текст: 114 <- тут не вошло последнее слово мама, позно до него дошло, но уже лишних пробелов насчитал
Текст-текст-пробелы: 118 <- так-как пробелы идут до самого конца, он их все и посчитал
пробелы-текст-текст: 114 <- тут не вошло последнее слово мама, позно до него дошло, но уже лишних пробелов насчитал
пробелы-текст-пробелы: 50 <- тут только дойдя до текста по серединке он понял что переборщил на 40+ символов ))