Menustrip wie TabControl verwenden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von MrNoName.

    Menustrip wie TabControl verwenden

    Hallo zusammen,
    ich bin ein ziemlicher Neuling was das Programmieren angeht, deshalb brauch ich eure Hilfe.

    Ich versuch mal so gut wie möglich mein Anliegen zu erklären.

    Also ich hätte gerne einen Menustrip der so aufgebaut ist (siehe Bild)


    Wenn ich auf Sprache klicke soll es zwei Optionen geben Englisch/Deutsch.
    Wenn ich auf Hilfe klicke öffnet sich eine neue Form mit einer Hilfe.
    ^^Diese zwei Sachen glaub ich bekomm ich hin.

    Jetzt möchte ich aber bei Start und Backup kein Untermenü haben und auch keine neue Form öffnen, sondern ich hätte dies zwei Menüpunkte vom verhalten her wie Tabs/Registerkarten.
    Das heißt, wenn ich auf Start klicke hätte ich gerne das sich bestimmte Textboxen, Lable usw. zu dem Punkt Start "öffnen" und wenn ich Backup klicke das sich halt die Labels, Textboxen usw. für Backup öffnen.
    Die Menüpunkte sollen also die Tabs die man anklicken kann darstellen und anstatt das sich der Inhalt innerhalb der Tabs ändert hätte ich gerne das sich das direkt in der Form ändert.

    Ich will mir damit den Mischmasch aus Menustrip und TabControl sparen, auch finde ich dass das Programm dadurch übersichtlicher wird.

    Ich hoffe es ist einigermaßen verständlich (Ist leider verdammt schwer die Idee, die man im Kopf hat, zu erklären)

    Danke schon mal im Vorraus
    Gruß
    Tobi :)
    Ok, werd ich mir mal ansehen.

    Gibtes eigentlich einen Punkt/Einstellung wo ich einstellen kann das ich im Designer das Panel nicht Größer als die Form ziehe kann, oder das Panel nicht über die Menüleiste ziehen kann ?

    Noch eine Frage zum Panel, da ich bloß immer Visible False auf Ture (oder anders herum) setzt behalten alle Textbox, Checkbox oder so ihren Wert oder den Checked/Unchecked Status oder ?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MrNoName“ ()

    sowas mit Panels zu designen wird ziemlich lausig, weil die ja alle übereinander liegen - was den Form-Designer dann eiglich unbrauchbar macht.
    Oder sie liegen sonstwie nebeneinander, und werden erst zur Laufzeit beim Startup übereinander gelegt - dennoch beeinträchtigt das den Designer-Wysiwyg-Komfort erheblich.

    Guggemol TabControl ohne Reiter - da hat man im Designer ein ordentliches TabControl, aber zur Laufzeit ist nix davon zu sehen.
    Hab mir das mal angesehen ist wohl die beste Lösung.
    Tu mir aber leider schwer das erzeugen und konfigurieren der MenuItems zu verstehen.
    Könntest du mir das vielleicht noch mal ein bisschen genauer erklären ?

    VB.NET-Quellcode

    1. 'MenuItems erzeugen und konfigurieren
    2. Dim tabMenuItems = TabPageToolStripMenuItem.DropDownItems
    3. For Each tp As TabPage In pages
    4. Dim itm = DirectCast(tabMenuItems.Add(tp.Text), ToolStripMenuItem)
    5. AddHandler itm.Click, AddressOf MenuItem_Click
    6. Next
    7. DirectCast(tabMenuItems(0), ToolStripMenuItem).Checked = True
    8. End Sub
    9. Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
    10. Dim tabMenuItems = TabPageToolStripMenuItem.DropDownItems
    11. For i = 0 To tabMenuItems.Count - 1
    12. Dim itm = DirectCast(tabMenuItems(i), ToolStripMenuItem)
    13. Dim isSelected = itm Is sender
    14. itm.Checked = isSelected
    15. If isSelected Then tabControl1.SelectedIndex = i
    16. Next


    Diesen Teil meinte ich. Der obere Teil erzeugt ja, wenn ich das richtig verstanden habe, aus jedem Tab einen Menu Punkt oder ?
    Der zweite Teil ist ja dafür da, das wenn ich auf einen Menü Punkt klicke, dass dann das Tab ausgewählt wird.
    Bei deinem Beispiel sind ja alle Tabs dann in einem Menüpunkt, jetzt weiß ich aber leider nicht, wie ich denn Code so anpasse das ich für jedes Tab einen einzelnen Menüpunkt habe.

    Sorry für meine schreckliche Formulierung immer, ist echt schwer für mich das einigermaßen Fach gerecht zu schreiben. Aber kommt hoffentlich mit der Zeit :)
    Du könntest auch für die Tabs einfach eine neue Form erstellen den Borderstyle auf none setzten die dann als Control deiner Mainform hinzufügen.
    Das wenn du quasi den Button "Start" drückst eine neue Instanz der Form gemacht wir und die dann den Controls deinen Mainform hinzugefügt wird.
    Dann musst du dich auch nicht darum kümmern die Felder nach Benutzung wieder zu leeren.

    LG Wolf

    C#-Quellcode

    1. Form2 form2 = new Form2();
    2. form2 .TopLevel = false;
    3. form2 .AutoScroll = true;
    4. form1.Controls.Add(form2 );
    5. form2 .Show();
    Warum so kompleziert !? 8|

    Nutze doch das UserControl-Snipped, daß in dem verlinktem Thread genannt wird.:
    TablessTabControl

    VB.NET-Quellcode

    1. Public Class TablessTabControl
    2. Inherits TabControl
    3. Private Const TCM_ADJUSTRECT As Integer = &H1328
    4. Protected Overrides Sub WndProc(ByRef m As Message)
    5. ' Hide the tab headers at run-time
    6. If m.Msg = TCM_ADJUSTRECT AndAlso Not DesignMode Then
    7. m.Result = CType(1, IntPtr)
    8. Return
    9. End If
    10. ' call the base class implementation
    11. MyBase.WndProc(m)
    12. End Sub
    13. End Class


    In die Form ziehen und mit

    VB.NET-Quellcode

    1. Private Sub Tab1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles Tab1ToolStripMenuItem.Click
    2. TablessTabControl1.SelectedTab = TabPage1
    3. End Sub
    die gewünschte TabPage anwählen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Pasta“ ()

    Das ist ein UserControl, daß von TabPage erbt.
    Du mußt einfach nur eine neue Klasse erstellen (siehe Bildanhang), den code rein kopieren und einmal kompilieren.
    Dann sollte im Disigner, in Der Toolbox ganz oben, dein UserControl erscheinen.
    Das kannst du dann, wie sonst auch, einfach in die Form ziehen.



    edit:
    Ich sehe grade, daß ich "UserControl" geschrieben habe. Das ist nicht ganz richtig, es handelt sich viel mehr um ein CustomControl

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Pasta“ ()