2016-03-20 19 views
0

Ich habe ein Problem mit einem benutzerdefinierten TabPage und Anker. In meiner Lösung möchte ich eine Vorlage für eine Registerkarte verwenden und sie basierend auf der Benutzerauswahl mehrmals hinzufügen.Benutzerdefinierte Registerkarte und Anker

Dies ist meine Vorlage:

public class ATMTemplate : TabPage 
{ 
    #region Fields 
    #endregion 

    #region Properties 
    public List<LogFile> LogFiles { get; set; } 
    public GroupBox GroupFiles { get; set; } 
    public DataGridView DGV_LogFiles { get; set; } 
    #endregion 

    #region Constructors 
    public ATMTemplate(string directory, TabControl parent) 
    { 
     this.Text = "ATM TEST 2"; 

     this.Parent = parent; 
     this.LogFiles = new List<LogFile>(); 
     this.GroupFiles = new GroupBox(); 
     this.DGV_LogFiles = new DataGridView(); 

     this.Controls.Add(this.GroupFiles); 
     this.GroupFiles.Location = new Point(6, 6); 
     this.GroupFiles.Text = "Log files:"; 
     this.GroupFiles.AutoSize = true; 
     this.GroupFiles.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top); 

     this.GroupFiles.Controls.Add(this.DGV_LogFiles); 
     this.DGV_LogFiles.Location = new Point(9, 18); 
     this.DGV_LogFiles.AutoSize = true; 
     this.DGV_LogFiles.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top); 

     this.Invalidate(); 
    } 
    #endregion 

    #region Methods 
    #endregion 
} 

Und ich schaffe meine TabPages mit diesem:

 ATMTemplate atm = new ATMTemplate("", tc_ATMs); 

Was nun das „Verzeichnis“ Teil des Konstruktor wird nicht verwendet. Nachdem ich eröffne mein TabPage ich so etwas wie dieses: enter image description here

Nachdem ich die Vollbild-Schaltfläche klicken, zeigt es mir dieses:

enter image description here

Und wenn ich an den Fenstermodus wieder die Kontrollen don‘ t schrumpfen, und ich bin mit dieser links:

enter image description here

hat jemand eine Ahnung, was ich in den Code falsch gemacht haben?

+1

Ich denke, das Mischen von 'AutoSize' und' Anchor' kann ein Problem sein. Ich würde versuchen, 'AutoSize = false' zu ​​setzen, die anfängliche' Size' und 'Location' entsprechend der aktuellen' Size' von 'TabPage' einzustellen und dann die' Anchors' zu setzen. Eine andere Möglichkeit (für den gezeigten Fall) könnte sein, "Dock = DockStyle.Top" oder "DockStyle.Fill" zu verwenden. –

+0

Ich könnte das Dock.Fill auf der DataGridView aber nicht auf der GroupBox verwenden. Ich habe die GroupBox.AutoSize auf false gesetzt und nichts geändert. Es half nur die anfängliche Breite der Groupbox. –

Antwort

0

Ich habe versucht, wie ich bereits mit diesen Änderungen kommentiert und succeded:

this.GroupFiles.Location = new Point(6, 6); 
this.GroupFiles.Size = this.Size - new Size(12, 12); // set initial size 
this.GroupFiles.AutoSize = false; // and autosize to false 
this.GroupFiles.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top); 

// ... 

// same thing for the grid view 
this.DGV_LogFiles.Location = new Point(9, 18); 
this.DGV_LogFiles.Size = this.GroupFiles.Size - new Size(18, 36); 
this.DGV_LogFiles.AutoSize = false; 

Dies gibt das Ergebnis Sie erwarten.

Verwandte Themen