Вы можете использовать метод Graphics.MeasureString()
.
С примером кода вашего текстового назначения на вашей панели я, возможно, смогу предоставить пример кода с использованием метода MeasureString()
,если вам это нужно.
У меня нет возможности узнать, является ли метод Graphics.MeasureString()
частью Компактной платформы, как это не сказано на странице, на которую я ссылался.РЕДАКТИРОВАТЬ # 1
Вот ссылка , где я ответил на другой вопрос, связанный с размером текста, в то время как я ищу для вас пример.=)
EDIT # 2
Вот еще одна ссылка, связанная с вашим вопросом.(Следующее редактирование - пример кода. = P)
РЕДАКТИРОВАТЬ # 3
public void DataItemClicked(ShipmentData shipmentData) {
// Setup the HintBox
if (_dataItemHintBox == null)
_dataItemHintBox = HintBox.GetHintBox(ShipmentForm.AsAnObjectThatCanOwn(),
_dataShipSelectedPoint,
new Size(135, 50), shipmentData.LongDesc,
Color.LightSteelBlue);
// Beginning to measure the size of the string shipmentData.LongDesc here.
// Assuming that the initial font size should be 30pt.
Single fontSize = 30.0F;
Font f = new Font("fontFamily", fontSize, FontStyle.Regular);
// The Panel.CreateGraphics method provides the instance of Graphics object
// that shall be used to compare the string size against.
using (Graphics g = _dataItemHintBox.CreateGraphics()) {
while (g.MeasureString(shipmentData.LongDesc, f).Width > _dataItemHintBox.Size.Width - 5) {
--fontSize;
f = new Font("fontFamily", fontSize, FontStyle.Regular);
}
}
// Font property inherited from Panel control.
_dataItemHintBox.Font = f;
// End of font resizing to fit the HintBox panel.
_dataItemHintBox.Location = new Point(_dataShipSelectedPoint.X - 100,
_dataShipSelectedPoint.Y - 50);
_dataItemHintBox.MessageText = shipmentData.LongDesc;
// It would be nice to set the size right here
_dataItemHintBox.Size = _dataItemHintBox.MethodToResizeTheHeightToShowTheWholeString()
_dataItemHintBox.Show();
}
Отказ от ответственности: Этот код не имеетбыл проверен и находится на вершине моей головы.Некоторые изменения могут быть обязательными для того, чтобы вы могли проверить это.Это обеспечивает руководство для достижения того, чего вы, кажется, хотите достичь.Возможно, есть лучший способ сделать это, но я знаю, что этот работает.Ну, алгоритм работает, как вы можете видеть в других моих ответах.
Вместо строки:
SizeF fontSize = 30.0F;
Вы также можете сделать следующее:
var fontSize = _dataItemHintBox.Font.Size;
Почему это так?
Поскольку Font.Size
свойство только для чтения .Итак, вам нужно создавать новый экземпляр класса System.Drawing.Font
каждый раз, когда Font.Size
будет меняться.
В вашем сравнении вместо строки:
while (g.MeasureString(shipmentData.LongDesc, f)...)
Вы также можете иметь:
while (g.MeasureString(shipmentData.LongDesc, _dataItemHintBox.Font)...)
Это сведет на нет необходимость во втором Font
экземпляре класса, то есть f .
Пожалуйстане стесняйтесь публиковать отзывы, так как я могу изменить свой образец, чтобы он соответствовал вашей реальности на основе полученных отзывов, чтобы они лучше помогали вам.=)
Надеюсь, это поможет!=)