Расположение элементов управления в середине CheckBox - PullRequest
3 голосов
/ 02 сентября 2008

Это продолжение моего предыдущего вопроса " Позиционирование в зависимости от шрифта. " Это попытка решить проблему real , стоящую за этим вопросом, возможно, способами, отличными от Я спрашивал о.

Пример постановки задачи: Я хочу установить флажок «Скорректировать цены на после загрузки», где - это число, которое можно задать с помощью NumericUpDown ---, а - это либо «процент», либо «доллары», при этом выбор ComboBox. Это будет в одной строке.

Сложность: Я хочу иметь возможность изменить свои шрифты для всех этих элементов управления (в основном, установив их на System.Drawing.Fonts.MessageBoxFont, то есть Tahoma 8 pt в Windows XP / etc. И Segoe UI 9 pt на Vista), не испортив мой макет, который с моей текущей Position -свойством - настройка парадигмы не работает.

В целом, я бы хотел, чтобы элементы управления динамически располагались независимо от шрифта, чтобы NumericUpDown плотно вписывался в пространство между "by" и ComboBox, и аналогично ComboBox вписывается в отношении CheckBox и строки " после загрузки "вправо.

Часть, которую все, кажется, упускают: Это все вложено в CheckBox. Поэтому, в идеале, нажатие на слова «после загрузки» должно поставить / снять флажок и нарисовать небольшой прямоугольник вокруг «Корректировать цены после загрузки». Так что простое добавление дополнительного Label в конец не сработает, потому что тогда оно не переключит CheckBox; Точно так же попытка обвязать вещи, подключив такое событие Label Click, не даст желаемого прямоугольника выделения.

Решения? На данный момент я думаю:

  1. Переосмыслите проблему, каким-то образом, возможно, с помощью уродливого решения, такого как две отдельные строки текста: «Корректировка найденных цен после загрузки» (CheckBox), «Сумма корректировки:» (NumericUpDown и ComboBox ). Это действительно плохо, потому что мой блок опций абсолютно полон опций этого типа (то есть типа в примере), поэтому он по крайней мере удвоится по вертикали.

  2. Какой-то пользовательский элемент управления? SplittableCheckBox

  3. Какая-то магия с TableLayout контролем? (Уверен, что это терпит неудачу в той части, которую все, похоже, упускают.)

  4. Сдавайтесь и возвращайтесь к MS Sans Serif, либо используйте Tahoma равномерно, либо упаковывайте пользовательский интерфейс Segoe вместе с моим приложением, не уважая системные шрифты по умолчанию.

  5. (Новое, через редактирование) Переключитесь на WPF, если кто-то сможет убедить меня, что он точно поддерживает этот сценарий.

1 Ответ

0 голосов
/ 02 сентября 2008

Если у вас есть несколько вариантов, которые следуют этому макету, почему бы не создать пользовательский элемент управления? Пользовательский элемент управления будет содержать CheckBox, NumericUpDown, ComboBox и метку для «после загрузки». Вы можете переопределить OnFontChanged, чтобы настроить расположение элементов управления на основе рендеринга текста с заданным шрифтом. Добавьте EventHandler к метке, чтобы установить или снять флажок.

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

...