Vom TabControl die Position von sub-control auslesen.

BLR

Erfahrenes Mitglied
Hallo,

Ich füge paar GroupBox-Controls auf ein TabControl-Element.
Nun möchte ich den Y-Wert der letzten GroupBox auslesen.

Damit ich später sagen kann:

Code:
new Point(gpBoxen[i].Location.X, variousPos + 185);

Ich habe bereits versucht mit:

Code:
 variousPos = gpBoxen[i - 1].Location.Y;
oder
Code:
variousPos = gpBoxen[i - 1].DisplayRectangle.Y;

Aber hier werden mir nicht die Y-Wert zurückgegeben, die ich suche.
Ich benötige den Y-Wert, so wie ich ihn im TabControl auf der Gui sehe.

Ich habe nun etwas weiter geforscht und mir ist aufgefallen, dass wenn ich bsp.
drei GroupBoxen im Array habe, dann haben die alle beim:

Code:
gpBoxen[i ].DisplayRectangle.Y;
den selben Wert. (Bei mir ist das der Wert 16).
Obwohl ich eigentlich bei der Zweiten Box gesagt habe: ErsteBox + 100

Danke für jeden Tipp.
 
Zuletzt bearbeitet:
Die Location gibt immer die Position innerhalb seines ContainersControls zurück.
So wie ich dich verstehe liegen die GroupBox in verschiedenen Containern.

Was du machen müsstest ist ev. die Koordinaten umrechen, dafür gibt es beim Control die Methoden
PointToClient und PointToScreen.

Ansosnten könnte ich mir höchstens noch vorstellen das du ev. DockSTyle Top bei den GroupBoxen hinterlegt hast.
 
Ach nicht DisplayRectangle Abfragen, das bringt immernur den sichtbaren Bereich des Controls, über diese Eigenschaft kannst du die Sichtbarkeit des Controls Steuern (Muss überschrieben Werden die Eigenschaft)
16 Wird also der Sichtbare bereich der GroupBox sein innerhalb diesem die Child Controls der GroupBox angezeigt werden.

groupBox.Location abfragen
 
hhmm....

groupBox.Location.Y ist in dem Moment = 0
obwohl ich vorher gesagt habe:
Code:
 tabCAD.Controls.Add(gpBoxen[i]);
 
Aber hast du gpBoxen[ i ] auch eine Location gesetzt?
gpBoxen[ i ].Location=new Point (10,10);

Ansonsten ist es ja erstmal Point.Empty, was X=0, Y=0 wäre.
 
= new Point ( 10,10)

kann ich erstmal nicht machen, weil das erste Argument variabel ist und anhand der Location von der vorherigen GroupBox berechnet werden muss.

Ich will einfach 4 Groupboxes auf einem TabControl mit einem Abstand zueinander sehen.
Bei den ersten zwei klappt das.
Da lese ich den Y-Wert von location aus ( 16) und rechne was dazu.
Aber von der zweiten auf die dritte GroupBox klappt das komischeweise nicht, denn die zweite hat auch den Wert 16.
Wenn ich dann den selben Anstand dazu rechne, dann überklatche ich logischeweise die zweite groupbox mit der dritten...
 
Zeig doch mal ein bisschen mehr Code, beispielsweise wie du die GroupBox-Controls erstellst und wie du auf die zuletzt Erstellte zugreifst, bevor eine Neue erstellt wird. Vielleicht finden wir dann das Problem.
 
Oder er nutzt zum Beispiel einfach das FlowPanel. ^^

Oder man muss 1. Grouppanel.location.Y + Abstand + 2. Grouppanel.Location.Height + NeuerAbstand nehmen. Wenn ich das so richtig verstehe. Aber dann doch lieber FlowPanel nehmen.

Code:
Dim fl as new Flowpanel
fl.dock = Fill
TabControl1.Controls.Add(fl)
Dim grpbx as new GroupBox()
fl.Controls.Add(grpbx)

PS: Copy and Paste kann jeder. :D Nur wird es nicht funtkionieren.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück