2011-01-07 7 views
0

Ich würde gerne wissen, was ist die richtige Methode zum Erstellen einer Vollbildansicht eines TabSticks. Diese Seite hat andere Steuerelemente, und diese Steuerelemente haben verschiedene Ereignisse, die abonniert sind. Ich habe versucht, ein neues Vollbildformular zu erstellen und alle Steuerelemente der Registerkarten in dieses Formular zu kopieren, aber mit diesem Ansatz muss ich jedes Steuerelement an den entsprechenden Handler erneut abonnieren. Wenn ich nur die Referenzen hinzufüge, bleibt das Abonnement erhalten, aber wenn das Vollbildformular geschlossen ist, sind auch die referenzierten kopierten Steuerelemente verloren.Wie erstellen Sie eine Vollbildansicht einer Gruppe von Steuerelementen, die zu einer Registerkarte gehört

+0

Es gibt eine Chance, dies helfen könnte - http://stackoverflow.com/questions/2419356/how-do -you-modify-a-control-das-wurde-wieder-zu-einem-tab-page – Reddog

Antwort

6

Dies kann durch Winforms 'Unterstützung für die Reparatur eines Steuerelements elegant erledigt werden. Sie können es in ein temporäres Formular verschieben, das im Vollbildmodus angezeigt wird. Alle normalen Event-Handler arbeiten immer noch wie gewohnt. Hier ist eine Beispielimplementierung, funktioniert es für jede Kontrolle:

public static void ShowFullScreen(Control ctl) { 
     // Setup host form to be full screen 
     var host = new Form(); 
     host.FormBorderStyle = FormBorderStyle.None; 
     host.WindowState = FormWindowState.Maximized; 
     host.ShowInTaskbar = false; 
     // Save properties of control 
     var loc = ctl.Location; 
     var dock = ctl.Dock; 
     var parent = ctl.Parent; 
     var form = parent; 
     while (!(form is Form)) form = form.Parent; 
     // Move control to host 
     ctl.Parent = host; 
     ctl.Location = Point.Empty; 
     ctl.Dock = DockStyle.Fill; 
     // Setup event handler to restore control back to form 
     host.FormClosing += delegate { 
      ctl.Parent = parent; 
      ctl.Dock = dock; 
      ctl.Location = loc; 
      form.Show(); 
     }; 
     // Exit full screen with escape key 
     host.KeyPreview = true; 
     host.KeyDown += (KeyEventHandler)((s, e) => { 
      if (e.KeyCode == Keys.Escape) host.Close(); 
     }); 
     // And go full screen 
     host.Show(); 
     form.Hide(); 
    } 

Verwendungsbeispiel:

private void button1_Click(object sender, EventArgs e) { 
     ShowFullScreen(tabControl1); 
    } 
+0

danke Hans, mit der Registerkarte selbst funktioniert nicht aber mit der tabcontrol ja. Um weitere Steuerelemente hinzuzufügen, die ich auch in der Vollbildansicht benötige, habe ich ein Panel hinzugefügt und alles, was ich brauche, eingefügt, und im showfullscreen übergebe ich dieses Panel. Jetzt muss ich darüber nachdenken, wie ich den gesamten verfügbaren Platz nutzen kann, vielleicht hat das Panel Dock füllen, alle anderen Steuerelemente verwenden seine Standardgröße. Andere Sache ist, dass im While-Zyklus, ist es notwendig, überprüfen Sie die Existenz der Eltern, wenn sie nicht existieren, dann brechen. – mjsr

+0

nach ein paar tuning, die Vollbildansicht war schön. Ich werde Sie in die Liste der Mitarbeiter im Abspann meiner Anwendung, XD, hinzufügen, nochmals vielen Dank. – mjsr

+0

Ich hatte einige Probleme mit Dock = Fill-Steuerelemente, die nicht richtig dimensioniert sind ... klassisches Problem der Renderreihenfolge. Hinzugefügt ctl.BringToFront(); vor form.Show(); – AlanB

Verwandte Themen