Laden...

Form erweitern oder andocken

Erstellt von Rico913 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.046 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren
Form erweitern oder andocken

Hi,

ich arbeite mich gerade in VS2019 und C# ein und habe auch schon Anwendungsideen.

Nun stehe ich vor meinem ersten Problem:

Ich habe ein Form mit einem Menüstrip. In diesem Menü möchte ich per Checkbox verschiedene Optionen einzelner Module anbieten. D.h. ich habe zur Zeit 3 Optionen, die ich mit einander kombinieren kann oder auch alle anhaken.

Bei angehakter Option, soll sich das Hauptform entsprechend erweitern oder wieder "einklappen". Über IF checked und *.visible kann ich es für die erste Option darstellen.
Wenn ich aber kombinieren möchte oder die erste Option auslasse fällt mein derzeitiges Konstrukt zusammen - ich müsste soviel wenn dann Anweisungen schreiben, dass ich mir vorstelle, dass das nicht der "saubere Weg" ist.

Schlussendlich soll es eine Art Hauptform sein, in das ich mir per Option die verschiedenen Module laden kann und diese im Hauptform angezeigt bekomme.
Zudem soll sich das Form entsprechend der Optionen mit seiner Größe anpassen oder die Optionen docken als extra Form an das Hauptform an.

Sicherlich gibt es dafür eine Lösung, nur fehlt mir der Stubs in die richtige Richtung.

Danke euch schonmal im Vorraus....

4.939 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

du müßtest doch nur jede der 3 Optionen einzeln abfragen.
Was gibt es denn für Kombinationen, welche sich anders verhalten, als die Einzeloptionen?

Edit: Wenn du z.B. wissen möchtest, ob überhaupt eine der drei Optionen angewählt ist, dann einfach folgende oder-Verknüpfung benutzen:


bool is_at_least_one = option1 || option2 || option3;

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Aber mein Formular soll sich entsprechend in der Größe anpassen.

Mir fällt grad auf, dass ich das ganz vergessen hatte zu erwähnen - Sorry!

187 Beiträge seit 2009
vor 3 Jahren

Hi,
In diesem Menü möchte ich per Radiobuttons verschiedene Optionen einzelner Module anbieten. D.h. ich habe zur Zeit 3 Optione, die ich mit einander kombinieren kann oder auch alle anhaken.

Radiobuttons kann man nicht kombinieren, denn es kann immer nur einer aktiv sein. Du meinst sicherlich die Checkbox.

Ich hatte bisher noch nicht so einen Anwendungsfall, aber ich könnte mir vorstellen, dass man eine Variable, die die Kombinationen der Checkboxen darstellt, entsprechend maskiert.
Bei wenigen Optionen denke ich aber, dass das mit If schon ok ist.
Wie genau sieht denn bei Dir die Bedingung aus?

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Checkbox ... meinte ich


if (requestordnerÖffnenToolStripMenuItem.Checked == true)
            {
                requestordnerÖffnenToolStripMenuItem.Checked = false;
                GBFolderSearch.Visible = true;
                this.Size = new Size(150, 135);
             }
           else
            {
                requestordnerÖffnenToolStripMenuItem.Checked = true;
                GBFolderSearch.Visible = true;
                this.Size = new Size(150, 85);
            }

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Ein Beispiel zur Erklärung:

Form1 - Hauptform
Option1
Option2
Option3

Hauptform = Größe 150, 85
Option1 = Größe 150, 50
Option2 = Größe 150, 60

Wenn Option1 = checked dann vergrößert sich das Hauptform um y = 50 -> Hauptform = 150,135
Wenn Option1 + Option2 -> Hauptform = 150, 195 -> Option1 + Option2 angezeigt
Wenn Option2 only -> Hauptform = 150, 145 -> nur Option2 wird angezeigt
....
...

4.939 Beiträge seit 2008
vor 3 Jahren

Das ist doch dann ganz einfach, du gehst die drei Optionen durch und benutzt eine Variable für die Höhe, die du je Option entsprechend erhöhst und erst am Ende setzt du dann die Fenstergröße.


int height = BaseHeight;

if (option1)
  height += 50;

if (option2)
  height += 60;

if (option3)
  height += 70;

Size = new Size(Width, height);

PS: Bei mehr Optionen solltest du diese evtl. in einem Array (bzw. einer List<>) verwalten, um den Code übersichtlicher zu halten (d.h. in einer Schleife abarbeiten).

PPS: Was soll GBFolderSearch.Visible = true; in beiden if-else-Blöcken?
Und warum invertierst du die CheckBox wieder nach Auswahl?

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

GB.Foldersearch ist ein "Modul", welches ich mit der angehakten Option aktiviere:


this.GBFolderSearch.Controls.Add(this.CmdMALRep);
            this.GBFolderSearch.Controls.Add(this.CmdLims);
            this.GBFolderSearch.Location = new System.Drawing.Point(5, 83);
            this.GBFolderSearch.Name = "GBFolderSearch";
            this.GBFolderSearch.Size = new System.Drawing.Size(139, 47);
            this.GBFolderSearch.TabIndex = 34;
            this.GBFolderSearch.TabStop = false;
            this.GBFolderSearch.Text = "Requestordner";

Ich konnte die Option zwar anklicken, aber er hat den Haken nicht weggenommen - da habe ich es so gelöst. Gibt es eine schlauere Art??

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Guten Morgen,

ich hab's hinbekommen.
Das Problem, welches ich mit meinen Checkboxen hatte, konnte ich auch lösen. Manchmal ist die Lösung doch simpler als man glaubt -> CheckOnClick = true

Mein Lösungsweg sieht nun wie folgt aus:

int height = 85;
            int Opt_Zero_Heigth = 85;
            GBFolderSearch.Visible = false;
            GBImgCopy.Visible = false;
            GBFolderSearch.Location = new Point(5, 83);
            GBImgCopy.Location = new Point(5, 83);
            Opt_Menu_RequestFolder.Checked = false;
            Opt_Menu_ImgCopy.Checked = false;

            if (Menu_Opt1_FS == "1")
            {
                height += 50;
                Opt_Zero_Heigth += 0;
                GBFolderSearch.Visible = true;
                GBFolderSearch.Location = new Point(GBFolderSearch.Location.X, Opt_Zero_Heigth);
                Opt_Menu_RequestFolder.Checked = true;

            }
            
            if (Menu_Opt2_ImgCopy == "1")
            {
                height += 60;
                if (Menu_Opt1_FS == "1")
                    Opt_Zero_Heigth += GBFolderSearch.Size.Height;
                else
                    Opt_Zero_Heigth = 85;
                GBImgCopy.Visible = true;
                GBImgCopy.Location = new Point(GBImgCopy.Location.X, Opt_Zero_Heigth);
                Opt_Menu_ImgCopy.Checked = true;
            }


            this.Size = new Size(150, height);
        }

Danke für die Hilfe!!!