ウィンドウを「長方形」形式で注文する必要があります。つまり、ウィンドウが 6 つある場合は 2x3 の長方形で注文され、ウィンドウが 5 つある場合は 2x3 で注文されますが、最後のウィンドウがなければ、ウィンドウが 9 つある場合は 3x3 で注文されます。しかし、座標に問題があります - 子ウィンドウは mdiparent ウィンドウの範囲外です。(img)
Java の mdi アプリケーションで使用したのと同じアルゴリズムを使用しました
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
try{
indfr.get(counter).setLocation(i*theDesktop.getWidth()/a,j*theDesktop.getHeight()/b);
indfr.get(counter).setSize(theDesktop.getWidth()/a,theDesktop.getHeight()/b);
counter++;
}catch (IndexOutOfBoundsException exc){ break;}
どこでindfr - arralist of JInternalFrames
、そしてtheDesktop - JDesktopPane
C# のアルゴリズム
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
try
{
list[counter].SetDesktopLocation(i*list[counter].MdiParent.Width/a, j*list[counter].MdiParent.Height/b);
list[counter].Size = new Size(list[counter].MdiParent.Width/a, list[counter].MdiParent.Height/b);
counter++;
}
catch (IndexOutOfRangeException)
{
break;
}
どこのリスト -Form[] list = this.MdiChildern;
座標の何が問題になっていますか? (PSはアルゴリズム全体ではありませんが、ウィンドウが注文するメインループです)