/ / Propriedade principal do Windows Forms Bug - c #, formulários, controles, propriedades

Bug de propriedades superiores do Windows Forms - c #, formulários, controles, propriedades

Estou tentando preencher um contêiner com qualquernúmero de controles que têm a mesma altura e largura. Eu permito que esse contêiner seja reduzido ou aumentado pelo usuário e o contêiner organizará os controles para que ele se ajuste ao máximo de controles em uma linha possível. Aqui está o código para organizá-lo:

        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++;
}
}

O problema que encontro é que, no primeirona iteração do loop, multiplicarei a altura do controle pela linha e atribuirei esse valor à propriedade Top do controle. A primeira linha é 0 e a primeira altura é 165. 0 * 165 = 0, mas a propriedade Top contém um -20 mágico depois de atribuir o 0.

Alguém tem alguma idéia de como isso pode acontecer?

Respostas:

2 para resposta № 1

Você está tentando reescrever o FlowLayoutPanel.
Considere usá-lo.


Além disso, parece que o seu controls campo é um Dictionary<Something, Control>.
Esteja ciente de que a ordem de iteração de Dictionary.Values não é garantido, o que significa que você não está repetindo os controles na ordem em que foram adicionados ao dicionário.