Laden...

Elemente akzeptieren Anchor nicht bei Tabpage wechsel

Erstellt von Klarwasser91 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.403 Views
K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren
Elemente akzeptieren Anchor nicht bei Tabpage wechsel

Hallo Community,

Ich habe ein Problem mit einem TabControl in meinem Projekt.
Die Elemente auf der ersten Tabpage die ich in diesem TabControl aufrufe werden über den Anchor rezised. Funktioniert soweit wunderbar, wechsel ich allerdings die Tabpage werden die Anchor Einstellungen aus dem Designer nicht angewendet. Dies geschieht aber immer nur auf der Tabpage welche ich NICHT als Standard aufrufe.

Ich habe meinen Code nun schon sehr oft geprüft und finde den Fehler nicht. Die beiden TabPages und die Elemente darin/darauf haben identische Werte was Größe,Location,Anchor, etc. angeht.

Zur Veranschaulichung hänge ich noch ein paar Bilder an.
Hier sieht man im Designer sind die beiden Tabpages exakt identisch, starte ich das Programm im Debug wird durch die Anchor die größe der zuerst aufgerufenen Taboage samt Elementen auch angepasst, bei der zweiten Tabpage passen sich die Elemente nicht der Page an (trotz Anchor) (Gut am grauen Hintergrund zu erkennen).

Screenshot vom Fehler TabPage2 im Debug Modus:

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren
Bild 2

TabPage 1 im Designer

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren
Bild 3

TabPage 2 im Designer

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren
Bild 4

Screenshot von TabPage 1 im Debug Modus:

3.825 Beiträge seit 2006
vor 6 Jahren

Bei mir funktioniert der Anchor bei Winforms auch nicht immer richtig.

Abhilfe : Selber resizen !

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

H
523 Beiträge seit 2008
vor 6 Jahren

Kann ich bestätigen, ich hab's auch desöfteren dass Anchor aus unerkennbaren Gründen nicht funktioniert. Da hilft nur selber die Größen setzen.

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren

Hallo,

vielen Dank für eure Antworten.
Was ist denn die sauberste Methode um das resizing selbst zu übernehmen?

1.040 Beiträge seit 2007
vor 6 Jahren

Also ich kann das Verhalten nicht nachstellen. 🤔
Kannst du zufällig den Code der beides TabPages zur Verfügung stellen?

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren

            // 
            // tcJobFields
            // 
            this.tcJobFields.Anchor = ((System.Windows.Forms.AnchorStyles)
            (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.tcJobFields.Appearance = System.Windows.Forms.TabAppearance.Buttons;
            this.tcJobFields.Controls.Add(this.tpJobFields);
            this.tcJobFields.Controls.Add(this.tpPositionFields);
            this.tcJobFields.Location = new System.Drawing.Point(509, 7);
            this.tcJobFields.Name = "tcJobFields";
            this.tcJobFields.SelectedIndex = 0;
            this.tcJobFields.Size = new System.Drawing.Size(448, 456);
            this.tcJobFields.Style = MetroFramework.MetroColorStyle.Lime;
            this.tcJobFields.TabIndex = 68;
            this.tcJobFields.UseSelectable = true;

            // 
            // tpJobFields
            // 
            this.tpJobFields.Controls.Add(this.cbJobKeyField);
            this.tpJobFields.Controls.Add(this.lblJobKeyField);
            this.tpJobFields.Controls.Add(this.lvJobFields);
            this.tpJobFields.Location = new System.Drawing.Point(4, 41);
            this.tpJobFields.Name = "tpJobFields";
            this.tpJobFields.Padding = new System.Windows.Forms.Padding(3);
            this.tpJobFields.Size = new System.Drawing.Size(440, 411);
            this.tpJobFields.TabIndex = 0;
            this.tpJobFields.Text = "Kopfzeile";
            this.tpJobFields.UseVisualStyleBackColor = true;

             // 
            // lvJobFields
            // 
            this.lvJobFields.Anchor = ((System.Windows.Forms.AnchorStyles)
            ((((System.Windows.Forms.AnchorStyles.Top | 
            System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lvJobFields.AutoArrange = false;
            this.lvJobFields.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.chFieldName,
            this.chNr,
            this.chCaption});
            this.lvJobFields.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lvJobFields.FullRowSelect = true;
            this.lvJobFields.GridLines = true;
            this.lvJobFields.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
            this.lvJobFields.Location = new System.Drawing.Point(6, 32);
            this.lvJobFields.MultiSelect = false;
            this.lvJobFields.Name = "lvJobFields";
            this.lvJobFields.Size = new System.Drawing.Size(429, 339);
            this.lvJobFields.TabIndex = 67;
            this.lvJobFields.UseCompatibleStateImageBehavior = false;
            this.lvJobFields.View = System.Windows.Forms.View.Details;


            // 
            // tpPositionFields
            // 
            this.tpPositionFields.BackColor = System.Drawing.SystemColors.Control;
            this.tpPositionFields.Controls.Add(this.cbPositionKeyField);
            this.tpPositionFields.Controls.Add(this.lblPositionKeyField);
            this.tpPositionFields.Controls.Add(this.lvPositionFields);
            this.tpPositionFields.Location = new System.Drawing.Point(4, 41);
            this.tpPositionFields.Name = "tpPositionFields";
            this.tpPositionFields.Padding = new System.Windows.Forms.Padding(3);
            this.tpPositionFields.Size = new System.Drawing.Size(440, 411);
            this.tpPositionFields.TabIndex = 1;
            this.tpPositionFields.Text = "Positionszeile";

            // 
            // lvPositionFields
            // 
            this.lvPositionFields.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.lvPositionFields.AutoArrange = false;
            this.lvPositionFields.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.chFieldName2,
            this.chNr2,
            this.chCaption2});
            this.lvPositionFields.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lvPositionFields.FullRowSelect = true;
            this.lvPositionFields.GridLines = true;
            this.lvPositionFields.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
            this.lvPositionFields.HideSelection = false;
            this.lvPositionFields.Location = new System.Drawing.Point(6, 32);
            this.lvPositionFields.MultiSelect = false;
            this.lvPositionFields.Name = "lvPositionFields";
            this.lvPositionFields.Size = new System.Drawing.Size(429, 339);
            this.lvPositionFields.TabIndex = 68;
            this.lvPositionFields.UseCompatibleStateImageBehavior = false;
            this.lvPositionFields.View = System.Windows.Forms.View.Details;


1.040 Beiträge seit 2007
vor 6 Jahren

Was für ein TabControl nutzt du? Da sind nämlich Eigenschaften bei, die das normale TabControl nicht hat. =)

Ansonsten funktioniert aber auch der Code.
Kannst du evtl. das Projekt in abgespeckter Form zur Verfügung stellen?

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren

Ich nutze das MetroFramework für die TabControls, diesen Fehler hatte ich aber auch mit den normalen Windows Forms. Witzigerweise passiert dieser Fehler nur in meiner kleinen TabControl.
Ich kann einmal zumindest versuchen das Projekt soweit zur Verfügung zu stellen. Ich bin allerdings noch Anfänger also bitte nachsicht falls es dann Fehler ohne Ende enthält 😁

5.299 Beiträge seit 2008
vor 6 Jahren

ich bevorzuge und benutze immer Docking - evtl. kombiniert mit einem TableLayoutpanel.
Damit krieg ich bislang jedes Layout ohne eigenen Sizing-Code hin, und funzt auch immer.

Zum die möglichkeiten angugge video:
Layout in WinForms

Der frühe Apfel fängt den Wurm.

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren

Ich habe mich hier in der Zwischenzeit durch das Forum gelesen und auch schon einen Thread entdeckt wo du TableLayoutPanel usw. erklärt und empfohlen hast. Ich hatte nun in der Zwischenzeit mit Splitcontainer meine Tabpage zersplittert und hier dann die Listview auf Dock: Fill gesetzt. Es ist schon besser aber ich verzweifle immernoch. Mittlerweile ist es so, dass im 2. Tab die Listview durch Dock größer wird als die Tabpage? Hä? Ich verstehe einfach nicht was dort Falsch läuft.

T
461 Beiträge seit 2013
vor 6 Jahren

Hallo,

ich hatte mir das Bild in den Grafikeditor geladen, wenn ich jetzt nicht ganz blind bin im Schädel, seh ich keinen Unterschied von der Anzahl der Pixel her...

Grüße

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

K
Klarwasser91 Themenstarter:in
10 Beiträge seit 2017
vor 6 Jahren

Bei der Positionszeile fehlt wenn man so möchte der untere Rand

Hinweis von Abt vor 6 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

1.040 Beiträge seit 2007
vor 6 Jahren

Kannst du evtl. das Projekt in abgespeckter Form zur Verfügung stellen?

😉