Я использовал форму MDI на C# для отображения нескольких окон. Когда я использовал MdiLayout.TileVertical для изменения макета моих дочерних окон, я не мог получить правильный результат. Дочерние окна не отображались вертикально.
Захотелось результата:
1
2
3
4
Что у меня получилось:
3 1
4 2
Источник моего кода:
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void menuItemNew_Click(object sender, System.EventArgs e)
{
oFileDlg.CheckFileExists=true;
oFileDlg.CheckPathExists=true;
oFileDlg.Title = "Open File - MDI Sample";
oFileDlg.ValidateNames=true;
oFileDlg.Filter = "jpg files (*.jpg)|*.jpg";
if (oFileDlg.ShowDialog() == DialogResult.OK)
{
try
{
//Create a new instance of the MDI child template form
Form2 chForm = new Form2();
//set parent form for the child window
chForm.MdiParent=this;
//increment the child form count
count ++;
//set the title of the child window.
chForm.Text= "Child - " + count.ToString();
chForm.fileloc=oFileDlg.FileName;
chForm.FormBorderStyle = FormBorderStyle.Sizable;
//display the child window
chForm.Show();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(), "MDI Sample", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void menuItemClose_Click(object sender, System.EventArgs e)
{
//Gets the currently active MDI child window.
//Form a = this.ActiveMdiChild;
//Close the MDI child window
//a.Close();
this.Close();
}
private void menuItemAI_Click(object sender, System.EventArgs e)
{
//Arrange MDI child icons within the client region of the MDI parent form.
this.LayoutMdi(System.Windows.Forms.MdiLayout.ArrangeIcons);
}
private void menuItemCas_Click(object sender, System.EventArgs e)
{
//Cascade all child forms.
this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);
}
private void menuItemHoriz_Click(object sender, System.EventArgs e)
{
//Tile all child forms horizontally.
this.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal);
}
private void menuItemVert_Click(object sender, System.EventArgs e)
{
//Tile all child forms vertically.
//CheckWindows();
this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);
}
private void menuItemMax_Click(object sender, System.EventArgs e)
{
//Gets forms that represent the MDI child forms
//that are parented to this form in an array
Form [] charr= this.MdiChildren;
//for each child form set the window state to Maximized
foreach (Form chform in charr)
chform.WindowState=FormWindowState.Maximized;
}
private void menuItemMin_Click(object sender, System.EventArgs e)
{
//Gets forms that represent the MDI child forms
//that are parented to this form in an array
Form [] charr= this.MdiChildren;
//for each child form set the window state to Minimized
foreach (Form chform in charr)
chform.WindowState=FormWindowState.Minimized;
}
private void menuItem1_Click(object sender, System.EventArgs e)
{
//Gets forms that represent the MDI child forms
//that are parented to this form in an array
Form [] charr= this.MdiChildren;
//for each child form set the window state to Minimized
foreach (Form chform in charr)
chform.Close();
}
Есть какие-нибудь идеи по этому поводу?
привет BallShark, Как это устроено, когда у вас всего 3 дочерних формы?
@AnoopJ Да , если бы было только 3 дочерних формы, это работало хорошо.





Вы можете попробовать закрепить дочерние формы и выбрать желаемый результат.
Например: chForm.Dock = DockStyle.Left;
Привет, Ballhark! Не могли бы вы уменьшить это до Минимальный, полный и проверяемый пример.