Не работает свойство Ширина у ПолеФормы
Пример: У поля формы "ПодписьГруппДейств" - завышенная ширина, ничем не меняемая.
Код:
#Использовать gui
Перем Форма;
Процедура ПриСозданииОбъекта()
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();
//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
Форма.Показать();
КонецПроцедуры
//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
// Декорация1 = Форма.Элементы.Добавить("Декорация1", "ПолеФормы", Неопределено);
//Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
//Декорация1.Заголовок = "Это действительно работает!";
Форма.Высота = 100;
Форма.СостояниеОкна = СостояниеОкна.Развернутое;
ВидыПоляФормы = Форма.ВидПоляФормы;
ПоложениеЗаголовка = Форма.ПоложениеЗаголовка;
ВидГруппыФормы = Форма.ВидГруппыФормы;
ЭлементыФормы = Форма.Элементы;
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
ГруппаУпр = ЭлементыФормы.Добавить("ГруппаУпр", "ГруппаФормы", Неопределено);
ГруппаУпр.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаУпр.АвтоматическийРазмер = Ложь;
ГруппаУпр.Высота = 42;
Декорация1 = Форма.Элементы.Добавить("ПодписьГруппДейств", "ПолеФормы", ГруппаУпр);
Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
Декорация1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево; //это не помогло
Декорация1.АвтоматическийРазмер = Ложь; //и это не помогло
Декорация1.Ширина = 30;
Декорация1.Заголовок = "Действия с выделенными базами:";
Кнопка1 = ЭлементыФормы.Добавить("КнопкаОбновить", "КнопкаФормы", ГруппаУпр);
Кнопка1.Заголовок = "Обновить";
Кнопка1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
Кнопка1.УстановитьДействие(ЭтотОбъект, "Нажатие", "ПриНажатииКнопкаОбновить");
КонецПроцедуры
С шириной декорации действительно чудеса. Судя по коду в FormField.cs поле ввода упаковано в пару контейнеров -для заголовка _panelTitleContainer с минимальной шириной 50 и AutoSize = true; для контрола _panelControlContainer с минимальной шириной 100 и AutoSize = true. При установке ширины, устанавливается только ширина самого контрола, а не родительских контейнеров. Для декорации в примере выше, заголовок заполнил длинным текстом контейнер заголовка, при этом контейнер самого контрола остается пустым еще на ширину 100. Чуть получше будет ситуация, если установить свойство ПоложениеЗаголовка в Нет и вместо Декорация1.Заголовок = «Действия с выделенными базами»; написать Декорация1.Значение = «Действия с выделенными базами». Тогда не будет промежутка между декорацией и кнопкой, но все равно ширина декорации не сможет быть меньше 150 пикселей. Может минимальную ширину сделать меньше? На что это влияет? Вот такой код работает:
[ContextProperty("Ширина", "Width")]
public int Width
{
get { return _item.Width; }
set { _item.Width = value;
_panelControlContainer.Width = Math.Max(_item.Width, ((Size)_panelControlContainer.MinimumSize).Width);
_panelMainContainer.Width = Math.Max(_panelControlContainer.Width, ((Size)_panelMainContainer.MinimumSize).Width);
}
}
[ContextProperty("АвтоматическийРазмер", "AutoSize")]
public bool AutoSize
{
get { return _item.AutoSize; }
set { _item.AutoSize = value;
_panelControlContainer.AutoSize = value;
_panelMainContainer.AutoSize = value; }
}
[ContextProperty("Закрепление", "Dock")]
public int Dock
{
get { return _panelMainContainer.Dock.GetHashCode(); }
set
{
_item.Dock = (DockStyle)value;
_panelControlContainer.Dock = (DockStyle)value;
_panelMainContainer.Dock = (DockStyle)value;
}
}