/ / Windows Forms Top-Eigenschaftsfehler - c #, Formulare, Steuerelemente, Eigenschaften

Windows Forms Top Property Bug - c #, Formulare, Steuerelemente, Eigenschaften

Ich versuche, einen Container mit einem zu füllenAnzahl der Steuerelemente, die die gleiche Höhe und Breite haben. Ich lasse zu, dass dieser Container vom Benutzer verkleinert oder vergrößert wird, und der Container organisiert die Steuerelemente so, dass sie die meisten Steuerelemente in einer Zeile zusammenbringen. Hier ist der Code, um es zu organisieren:

        int row = 0;
int column = 0;
for (int i = 1; i <= controls.Count; i++)
{
controls.Values[i-1].Top = row * controls.Values[0].Height;
controls.Values[i-1].Left = column * controls.Values[0].Width;

if (i % controlsPerRow == 0)
{
// This finishes a row
row++;
column = 0;
}
else
{
column++;
}
}

Das Problem, dem ich begegne, ist das ersteNach der Iteration der Schleife multipliziert ich die Steuerhöhe mit der Zeile und ordnet diesen Wert der Top-Eigenschaft des Steuerelements zu. Die erste Zeile ist 0 und die erste Höhe ist 165. 0 * 165 = 0, aber die Top-Eigenschaft enthält eine magische -20, nachdem die 0 zugewiesen wurde.

Hat jemand eine Idee, wie das passieren kann?

Antworten:

2 für die Antwort № 1

Sie versuchen, das neu zu schreiben FlowLayoutPanel.
Erwägen Sie es stattdessen zu verwenden.


Es sieht auch so aus controls Feld ist a Dictionary<Something, Control>.
Beachten Sie, dass die Iterationsreihenfolge von Dictionary.Values ist nicht garantiert, was bedeutet, dass Sie die Steuerelemente nicht in der Reihenfolge durchlaufen, in der sie dem Wörterbuch hinzugefügt wurden.