2016-12-03 2 views
0

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

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

Я рассмотрел метод Control.Scale, упомянутый в this answer, но я не уверен, как его применять.

+0

Ну, вероятно, не то, что вы хотите услышать, но WPF здесь из-за этих недостатков WinForms. – Steve

+1

@Steve, не сдавайтесь на Winforms так быстро :) – Fabio

+0

@Fabio далеко от меня. Работа в тот же момент в большом проекте winform – Steve

ответ

2

Вместо расчета значений используется TableLayoutPanel управление.

  • Добавить TableLayoutPanel в форме
  • Set TableLayourPanel.Dock = Fill
  • Добавление столбцов и строк, как вам нужно
  • Набор столбцов и строк SizeType на «процент» и процентных значений, чтобы соответствовать ваши потребности.
  • Затем добавьте кнопки в ячейки, которые вы создали
  • Button.Dock = Fill чтобы заполнить всю ячейку.

Во время исполнения, когда размер формы изменится, размер и положение кнопок тоже изменятся.

+0

Отличный ответ, но моя кнопка не соответствует установленному количеству столбцов и строк - они свободно расположены в заданном пространстве, и мне нужно иметь возможность размещать их везде, где нужно, а всего масштаба. –

+0

@OMTRX, вы можете упорядочить кнопки одним и тем же «свободным» способом с помощью «TableLayoutPanel». Если вы укажете какой-то конкретный пример с причиной, которая не позволяет использовать 'TableLayoutPanel' – Fabio

+0

, что я сомневаюсь. Они все еще должны находиться внутри ячеек сетки, поэтому, если некоторые подходят, но другие перекрывают эту сетку, TLP не будет работать. – TaW