Расположение элементов управления в середине CheckBox

StackOverflow https://stackoverflow.com/questions/38428

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Пример постановки задачи: я хочу установить флажок " корректировать цены с помощью < X > < Y > после загрузки, " где < X > - число, которое можно изменить с помощью NumericUpDown --- и < Y > либо " процент " или " доллары, " с выбором, сделанным ComboBox. Это будет в одной строке.

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

В общем, я бы хотел, чтобы элементы управления были динамически размещены независимо от шрифта, чтобы < X > CheckBox плотно прилегал в пространство между " по " и < Y > Label, а также < X > Click вписывается в отношении < X > SplittableCheckBox и строки " после загрузки & вправо.

Часть, которую все, похоже, упускают: Все это вложено в TableLayout. Так что, в идеале, нажмите на слова & Quot; после загрузки & Quot; установите / снимите флажок и нарисуйте этот маленький прямоугольник выделения вокруг & «Отрегулируйте цены с помощью & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; после загрузки. " Так что простое добавление <=> в конце не работает, потому что тогда оно не переключает <=>; аналогично, попытка обвязать вещи, подключив такое <=> событие <=>, не даст желаемого прямоугольника выделения.

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

<Ол>
  • Переосмыслите проблему, каким-то образом, возможно, с помощью уродливого решения, такого как две отдельные строки текста: " Отрегулируйте найденные цены после загрузки " (<=>), " Сумма корректировки: " (<=> и <=>). Это действительно плохо, потому что мой блок опций абсолютно полон опций этого типа (то есть типа в примере), поэтому он по крайней мере удвоится по вертикали.

  • Какой-то пользовательский элемент управления? <=>?

  • Какая-то магия с <=> контролем? (Уверен, что это не удается в & Quot; ту часть, которую все, кажется, упускают.)

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

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

  • Это было полезно?

    Решение

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

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

    scroll top