Я рисую строку, используя следующее:
g.DrawString(somestring, somefont, new SolidBrush(Color.Black), X where it starts, Y where it starts));
Проблема:
Иногда я хочу выровнять нарисованную строку по left side
line
. Но это не сработает, если я не знаю, какой будет длина строки.
Возможное, но нубское решение:
Подсчитайте количество символов, умножьте на значение проб и ошибок и вычтите его в позиции X, например:
string somestring = Convert.ToString(Math.Round(10 * somevalue) / 10) + "m";
int stringcount1 = somestring.Count();
g.DrawString(somestring, somefont, new SolidBrush(Color.Black), X -stringcount1 * trialanderrorvalue, Y));
Это не работает, потому что, как вы можете догадаться, я создаю число, и это число может иметь decimal separator
или нет.
И в этом проблема, потому что десятичный разделитель не очень широкий символ, но все же считается, он будет посылать мою строку neptune-far от строки. Или я могу получить приличное значение проб и ошибок для числа с десятичным разделителем, и если в конечном итоге число не будет иметь десятичного разделителя, оно будет над линией (и испортит рисунок).
Любые подсказки? Возможно, заставить строку иметь ,0
в случае, если число является целым числом?
Редактировать:
Теперь я создал метод, который будет возвращать объект aSizeF
с заданной строкой и шрифтом.
static SizeF MeasureStringMin(string measureString, Font stringFont, PaintEventArgs e)
{
//// Set up string.
//string measureString = "Measure String";
//Font stringFont = new Font("Arial", 16);
// Measure string.
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(measureString, stringFont);
return stringSize;
}
Проблема в том, что когда я вспоминаю эту функцию, используя что-то вроде
SizeF stringSize = new SizeF();
stringSize = MeasureStringMin(somestring, somefont, ????)
Никогда не знаю, что поставить в третью переменную, намеки на это? Зачем мне PaintEventArgs
?
g
? - person Mephy   schedule 26.04.2015g
будет объектомGraphics
— это winforms/GDI. - person Blorgbeard   schedule 26.04.2015