MDI应用程序问题

时间:2012-01-01 17:13:22

标签: c# winforms mdi

申请的一般说明: 主要形式为MDI容器。在应用程序启动时,如果没有用于数据库配置的xml文件(在主窗体中检查)主窗体我调用另一个窗体作为showdialog()来填充所有数据库信息以构建连接字符串。然后我关闭表单并打开另一个登录,然后我回到Main表单,它有Split Container(2个面板:顶部有1个菜单,来自子表单的2个内容)。

我打开表格:

    private void PlanButton_Click(object sender, EventArgs e)
{
    plan.TopLevel = false;
    KontenerMenu.Panel2.Controls.Add(plan);
    plan.Dock = DockStyle.Fill;
    plan.Show();
}

并关闭表格:

private void Plan_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = false;
    this.Hide();
}

我对app的问题:

1。当我打开ShowDialog()表单进行数据库应用程序崩溃时,我点击取消按钮。取消按钮只是:

private void cancelButton_Click(object sender, EventArgs e)
{
    Application.Exit();
}

2.我有点击按钮打开/关闭/再次打开子表单的问题。当我点击“X”并希望打开时,应用程序崩溃,但不能引用不存在的对象

3。当我击中一个然后是另一个按钮时,我有几个按钮,它总是低于第一个而不是顶部

4。例如我的表格是200x200,在右下角我有按钮(所以位置让我们说190x190)我点击最大化按钮。我的按钮仍然是190x190,我希望它在右下角。我找不到任何财产。有没有或者我必须为此编写一些代码。

3 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题。请说清楚。
但作为对问题#4的回答,有一个锚属性可以做你想要的。

答案 1 :(得分:0)

您应该返回DialogResult值并在主窗体中测试,而不是尝试从对话框窗体中退出应用程序。对话框上的取消按钮不需要任何代码,只需将其DialogResult属性设置为“取消”,如果您有“确定”按钮,则将其DialogResult设置为“确定”。

DialogForm f = new DialogForm();
DialogResult r = f.ShowDialog();
if (r == DialogResult.Cancel)
{
   Close();
}

答案 2 :(得分:0)

我可以立即看到您的代码存在许多问题,包括:

  1. 如果您要使用Controls.Add动态添加控件,则应确保使用new()动态创建要添加的控件。我感觉你对对象生命周期和WindowForms控件生命周期没有清楚的理解。
  2. 仅在特殊情况下才应使用Application.Exit方法。它的目的是准确地实现您正在观察的结果 - 立即“崩溃”应用程序。让按钮关闭模式对话框的最简单方法是设置按钮的DialogResult属性。
  3. Winforms有一个非常优雅的系统,用于在可变大小的窗口上放置控件。要使用此系统,您应该熟悉所有控件上可用的Anchor和Dock属性。
  4. 看起来你正在做的是试图通过反复试验来学习WinForms。你可以做到这一点,但如果你能管理它,那么掌握一本好的教程,书籍,或者甚至参加课程都需要更长的时间并且更加痛苦。这将允许您一次一个地解决这些问题,并获得更愉快的学习体验。