2016-01-09 4 views
-1

Я создаю графический интерфейс WinForms, который должен быть независимым от разрешения (т. Е. Все элементы управления растягиваются/сжимаются во время пребывания на месте, независимо от разрешения пользователя).TableLayoutPanel растягивается, чтобы заполнить родительскую панель в форме

Моя проблема: по какой-то причине все мои элементы управления изменяются в размерах до тех пор, пока форма сокращается, а не растягивается.

Если пользователь изменяет размер окна, чтобы уменьшить его (как только я закончу, он будет заблокирован для максимизации, но для целей тестирования я оставил его изменчивым), все элементы управления в окне следуют примеру , Если пользователь растягивает окно за пределами его начального размера, элементы управления остаются на месте, что, в свою очередь, означает, что они больше не находятся в правильном положении, так как окно теперь больше. Они изменяют размер очень хорошо от очень маленьких, вплоть до их первоначального размера, а затем они просто останавливаются; в то время как окно продолжает расти.

Мой макет работает следующим образом:

Main form 
    --> 1x3 TableLayoutPanel 
     --> 1x1 TableLayoutPanel in center row of parent panel 
     --> User control that populates parent 1x1 TableLayoutPanel on button click 

      User Control 
       --> 1x1 TableLayoutPanel 
        --> Multiple TableLayoutPanel's laying out multiple controls inside parent 1x1 TableLayoutPanel 

Все мои панели устанавливаются на якорь TOP/BOTTOM/LEFT/RIGHT

Я пробовал различные комбинации Авторазмера, растет стиль, док-станция и якорь для каждой основной панели, но не может показаться, что мои основные панели (например, панель, содержащая пользовательский элемент управления) имеют размер больше, чем их первоначальный размер.

Надеюсь, я описал свою проблему достаточно хорошо, чтобы понять, но в принципе; мой макет проекта состоит из множества TableLayoutPanels внутри eachother для каждого настраиваемого элемента управления, и этот пользовательский элемент управления заполняет 1x1 TableLayoutPanel внутри моей основной формы, которая действует как панель «Основной» для моего графического интерфейса. Затем пользователь выбирает, какой пользовательский элемент управления будет отображаться в основной форме, с кнопкой, расположенной в верхней строке родительской таблицы 1x3 TableLayoutPanel.

Позвольте мне знать, если мне нужно, чтобы объяснить это лучше для того, чтобы ответить


EDIT: Я обнаружил, если я установил AutoScaleMode пользовательского элемента управления в Font он будет изменять точно, как я этого хочу. Единственная проблема с этим решением заключается в том, что когда элемент управления загружается в форму, он слишком велик, и некоторые из них обрезаны краями моей основной формы. Как только я вручную изменяю размер формы (даже маленький бит), элемент управления исправляет себя до нужного размера в форме.

Таким образом, я чувствую, что я рядом, но не совсем там, как с готовым продуктом, пользователь не будет контролировать изменение размера окна, он будет вынужден максимизировать.

EDIT 2: Я попытался добавить это событие кнопки, которая отображает пользовательский элемент управления внутри панели:

  MyUserControl MainPanelControls = new MyUserControl(); 
      MainPanel.SuspendLayout(); 
      MainPanel.Controls.Clear(); 
      MainPanel.Controls.Add(MainPanelControls); 
      MainPanel.Dock = DockStyle.Fill; //This seems to have no effect    
      MainPanel.ResumeLayout(false); 
+0

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

ответ

-1

Оказывается, единственная проблема была по какой-то причине я имел MainPanel.ResumeLayout(false); вместо true. Я не уверен, почему у меня установлено это значение false, но теперь все работает нормально.

Так, чтобы ответить на мой собственный вопрос:

Чтобы сделать шкалу управления пользователем правильно, я должен был установить это AutoScaleMode в Font, а затем на моей кнопке придающего пользовательского элемента управления к основному TableLayoutPanel я должен был изменить MainPanel.ResumeLayout(false) к MainPanel.ResumeLayout()

private void Button1_Click(object sender, EventArgs e) 
     { 
     MyUserControl MainPanelControls = new MyUserControl(); 
     MainPanel.SuspendLayout(); 
     MainPanel.Controls.Clear(); 
     MainPanel.Controls.Add(MainPanelControls);    
     MainPanel.ResumeLayout(); 
     } 
Смежные вопросы