oscript-simple-gui icon indicating copy to clipboard operation
oscript-simple-gui copied to clipboard

Не работает свойство Ширина у ПолеФормы

Open ildary opened this issue 7 years ago • 1 comments

Пример: У поля формы "ПодписьГруппДейств" - завышенная ширина, ничем не меняемая.

Код:

#Использовать gui

Перем Форма;

Процедура ПриСозданииОбъекта()

    УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
    Форма = УправляемыйИнтерфейс.СоздатьФорму();

    //# Устанавливаем обработку события ПриОткрытии
    Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
    Форма.Показать();

КонецПроцедуры

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
    
//    Декорация1 = Форма.Элементы.Добавить("Декорация1", "ПолеФормы", Неопределено);
    //Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
    //Декорация1.Заголовок = "Это действительно работает!";
    
    Форма.Высота = 100;
    Форма.СостояниеОкна = СостояниеОкна.Развернутое;

	ВидыПоляФормы	   = Форма.ВидПоляФормы;
	ПоложениеЗаголовка = Форма.ПоложениеЗаголовка;
	ВидГруппыФормы	   = Форма.ВидГруппыФормы;
	ЭлементыФормы	   = Форма.Элементы;
    
    УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();

    ГруппаУпр = ЭлементыФормы.Добавить("ГруппаУпр", "ГруппаФормы", Неопределено); 
    ГруппаУпр.Вид = ВидГруппыФормы.ОбычнаяГруппа; 
    ГруппаУпр.АвтоматическийРазмер = Ложь; 
    ГруппаУпр.Высота	= 42; 
    
    Декорация1 = Форма.Элементы.Добавить("ПодписьГруппДейств", "ПолеФормы", ГруппаУпр); 
    Декорация1.Вид	= Форма.ВидПоляФормы.ПолеНадписи; 
    Декорация1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево; //это не помогло 
    Декорация1.АвтоматическийРазмер = Ложь; //и это не помогло 
    Декорация1.Ширина = 30; 
    Декорация1.Заголовок = "Действия с выделенными базами:";

	Кнопка1 = ЭлементыФормы.Добавить("КнопкаОбновить", "КнопкаФормы", ГруппаУпр);
	Кнопка1.Заголовок	= "Обновить";
	Кнопка1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
	Кнопка1.УстановитьДействие(ЭтотОбъект, "Нажатие", "ПриНажатииКнопкаОбновить");

КонецПроцедуры

ildary avatar Oct 19 '18 04:10 ildary

С шириной декорации действительно чудеса. Судя по коду в 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;
            }
        }

alex-bob-lip avatar Aug 22 '19 09:08 alex-bob-lip