.Net 3.5 Winforms Basic Dialog с меткой Autosize для пользовательского текстового содержимого - PullRequest
0 голосов
/ 27 августа 2010

Я хочу форму, содержащую:

+----------------------------------------+
| Dialog Title                          X|
+----------------------------------------+
+----------------------------------------+
|icon   |                                |
|32x32px| One-line label (Heading)       |
|       +--------------------------------+
|       |                                |
|       | Message label with auto-wrap   |
|       | text according to any given    |
|       | string.                        |
+-------+--------------------------------+
| row for dialog buttons...              |
+----------------------------------------+

Я с удовольствием отвечу на любые вопросы; основная идея все еще проста (хотя I не может заставить его работать): при наличии любой строки сообщения, содержащей возможные символы новой строки, диалоговое окно (форма) должно сохранять свою ширину, но увеличиваться по вертикали в зависимости от сообщения.

В любом случае, как это можно сделать?

Ответы [ 5 ]

2 голосов
/ 27 августа 2010

Я думаю, что компонент, который вы найдете наиболее полезным, - TableLayoutPanel.Найдите его в разделе «Контейнеры» на панели инструментов.Установите TableLayoutPanel 's Dock = Fill.

. Вы можете использовать его для размещения элементов управления в столбцах и строках.Когда элемент управления находится внутри TableLayoutPanel, вы можете использовать свойство ColumnSpan для такого элемента управления, чтобы охватить его по нескольким столбцам;Я бы использовал это для ряда кнопок внизу, то есть сделал бы новую панель для ряда кнопок и поместил бы кнопки в это.Для значка, конечно, вместо этого используйте RowSpan.

Поэкспериментируйте с различными значениями Anchor, AutoSize и AutoSizeMode для некоторых элементов управления, особенно метки сообщения, которую вы хотите увеличитьавтоматически.Если вы установите для TableLayoutPanel и Form значение AutoSize = true, окно автоматически увеличится вместе с текстовым содержимым.

1 голос
/ 27 августа 2010

Вы можете попробовать обработать событие TextChanged метки и измерить размер строки, используя что-то вроде этого:

Graphics g = Graphics.FromHwnd(this.Handle);
SizeF s = g.MeasureString(yourLabel.Text, yourLabel.Font, yourLabel.Width);

После этого, зная размеры других элементов управления, вы можете изменитьРазмер окна соответственно.Я предполагаю, что вы хотите изменить размер окна только по вертикали.

0 голосов
/ 27 августа 2010

Вы можете попытаться узнать позицию последнего символа

TextBox box = new TextBox();
box.Text = "...";
var positionOfLastCharacter = box.GetPositionFromCharIndex(box.TextLength);

Вы можете рассчитать необходимую высоту текстового поля и формы.

Редактировать: Это даст вам левый верхний угол последнего символа, вы должны добавить 10 пикселей или около того, чтобы последняя строка подходила.

0 голосов
/ 27 августа 2010

Попробуйте TableLayoutPanel для макета и установите для его свойства Dock значение Fill, чтобы оно занимало все Form.Затем добавьте метки «одна строка» и «сообщение» в соответствующие ячейки и установите для их свойств Dock значение Fill, чтобы они заняли всю ячейку.

Если вы действительно хотите изменить размер всей формы, чтобыдля подгонки любого сообщения во время выполнения вам, возможно, придется использовать Graphics.MeasureString, чтобы определить область, в которой должна содержаться строка, а затем изменить размер формы, чтобы она содержала эту область.

0 голосов
/ 27 августа 2010

Создайте свою собственную новую форму и покажите ее в виде диалогового окна. Вы можете указать в этой форме все, что захотите.

Здесь у вас есть учебник, который покажет вам, как выполнить сложнейшую часть.

...