Nieprawidłowa zmiana lokacji elementów forma po zmianie wymiarów okna

0

Męczę się już drugi dzień z rzędu z problemem i już kończą mi się pomysły powoli.,,

Problem wygląda następująco. Mam główny form, na którym znajduje się TabControl z kilkoma stronami a na nich kilka zwykłych paneli na których umieszczone są TableLayoutPanele. Te ostatnie znajdują się po to aby po maksymalizacji głównego okna, wszystkie elementy które znajdują się na nich ,gładko "rozeszły" się po całym formularzu. Wszystko jest okej do momentu gdy jestem na konkretnej stronie TabControla na której znajdujące się tam elementy(Panel->TableLayoutPanel->TextBoxy,Buttony) mają się przemieścić Czyli jestem na pierwszej stronie TabControla maksymalizuję okno, przechodzę do trzeciej strony TabControla i robi się za przeproszeniem syf. Jestem na trzeciej stronie TabControla,maksymalizuję,minimalizuję etc. i wszystko jest ok.
Mam nadzieję że udało mi się to jakoś sensownie wytłumaczyć jeśli nie to wstawiam swoją radosną twórczość co by trochę zobrazować problem.

PROBLEM.png

Czarny - TabControl i Panele,
Pomarańcz - TableLayoutPanel,
T - Textboy,Buttony itp.

O to co na razie udało mi się wyskrobać. Czy idę w dobrym kierunku? Czy może trzeba zabrać się za to z zupełnie innej strony ?

private void applicationMaximizeBtn_Click(object sender, EventArgs e)
        {

            if (WindowState == FormWindowState.Maximized)
            {
                this.WindowState = FormWindowState.Normal;

            }
            else if (WindowState == FormWindowState.Normal)
            {
                this.WindowState = FormWindowState.Maximized;

            }
            //Przesunięcie trzech paneli widocznych na rysunku w określone punkty na formie.

            ResizeTab(borrowBookPanel, borrowBookLayout, 160, 10, 0, 0, 50);
            ResizeTab(borrowUserPanel, borrowUserLayout, 640, 10, 265, 0, 50);
            ResizeTab(borrowPanel, borrowLayout, 1120, 10, 547, 0, 70);
             
       
private void ResizeTab(MetroPanel mp, TableLayoutPanel tlp,
            int newXPanelLocation, int newYPanelLocation,
            int oldXPanelLocation, int oldYPanelLocation, int newPanelWidth)
        {
            if (WindowState == FormWindowState.Maximized)
            {
                mp.Location = new Point(newXPanelLocation, newYPanelLocation);
                mp.Width += newPanelWidth;
                foreach (var label in tlp.Controls.OfType<MetroLabel>())
                {
                    label.Height += 5;
                    label.FontSize = MetroLabelSize.Tall;
                }
                foreach (var textBox in tlp.Controls.OfType<MetroTextBox>())
                {
                    textBox.Height += 5;
                    textBox.FontSize = MetroTextBoxSize.Tall;
                }
            }
            else if (WindowState == FormWindowState.Normal)
            {

                var oldLocation = new Point(oldXPanelLocation, oldYPanelLocation);
                mp.Location = oldLocation;
                mp.Width -= newPanelWidth;
                foreach (var label in tlp.Controls.OfType<MetroLabel>())
                {
                    label.Height -= 5;
                    label.FontSize = MetroLabelSize.Medium;
                }
                foreach (var textBox in tlp.Controls.OfType<MetroTextBox>())
                {
                    textBox.Height -= 5;
                    textBox.FontSize = MetroTextBoxSize.Small;
                }
                
            }

2

idziesz w bardzo złą stronę - to się robi całkiem inaczej. Użyj odpowiednich właściwości: `Anchor', 'Dock', 'Margin', 'Padding'. Jak to poustawiasz to kontrolki same będą się dostosowywać rozmiarem po zmianie rozmiaru całości

0

Dzięki za pomoc.

Chyba nie do końca dobrze opisałem problem. Wielkość kontrolek jest jak najbardziej w porządku. Czyli zmienia się wraz ze zmianą formularza. Chodzi o to że właśnie ustawiając anchor, dock, etc nie otrzymuje takich efektów jakich chce jeśli chodzi o rozmieszczenie paneli na formularzu (bardzo możliwe że zle ustawiam te opcje, ale z drugiej strony mam trzy panele na jednym tabie więc nie mam jakiegoś wielkiego pola manewru).Dlatego też chcę ręcznie poprawić to rozmieszczenie, określając punkt w którym ma się znajdować konkretny panel. Ale jeśli to jest totalnie zle to muszę z tego zrezygnować.

Chwilowo rozwiązałem problem dodając dodatkowy tableLayoutPanel na którym znajduje się reszta paneli, jednak wydaje mi się to złe bo teraz chcąc stworzyć przycisk, który czyści wszystkie wpisy w textboxach muszę przebijać się przez jeszcze większa ilość warstw złożonych z paneli bądz TableLP :(.

0

dokładnie wszystko to co chcesz zrobić da się zrobić właściwościami, które wymieniłem. Masz tam na sztywno wpisane jakieś wartości do procedury ResizeTab - a co jak ktoś będzie miał całkiem inną rozdzielczość jak Ty? To co próbujesz zrobić to zły pomysł.

1 użytkowników online, w tym zalogowanych: 0, gości: 1