• MDI父窗体

    MDI窗体设计器本身是这个样子
    image.png
    之后首先在父窗体里定义静态全局变量窗体一和窗体二
    eg:public static ReadFile readFileForm;
    public static StationPic stationPic;
    之后用的时候实例化就行
    readFileForm = new ReadFile();

    image.png

    • 一些必须的方法

    1)判断MDI子窗体是否存在

    1. private bool HaveOpened(Form MdiParentForm,string MdiChildFormType)
    2. {
    3. bool bReturn = false;
    4. for(int i = 0;i<MdiParentForm.MdiChildren.Length;i++)
    5. {
    6. if(MdiParentForm.MdiChildren[i].GetType().Name==MdiChildFormType)
    7. {
    8. MdiParentForm.MdiChildren[i].BringToFront();
    9. bReturn = true;
    10. break;
    11. }
    12. }
    13. return bReturn;
    14. }


    2)防止同时生成多个同一类型的子窗体

    1. public void OpenChildForm(Form formChild)
    2. {
    3. formChild.Name = formChild.GetType().FullName;
    4. bool isOpened = false;
    5. foreach (Form form in this.MdiChildren)
    6. {//如果要显示的子窗体已经在子窗体的子窗体数组中,就把新建的多余的销毁
    7. if (formChild.Name == form.Name)
    8. {
    9. form.Activate();
    10. formChild.Dispose();
    11. isOpened = true;
    12. break;
    13. }
    14. }
    15. if (!isOpened)
    16. {
    17. formChild.MdiParent = this;
    18. formChild.Show();
    19. }
    20. }
    • 例子1:想让父窗体的打开按钮读取文件并且赋值于子窗体的TextBox中

    可以直接将在子窗体里定义一个字符串还有属性
    public string StrValue
    {
    get { return this.Content.Text; }
    set { this.Content.Text = value; }
    }
    在父窗体的打开文件里写读文件的方法

    1. OpenFileDialog dialog = new OpenFileDialog
    2. {
    3. Multiselect = true,//该值确定是否可以选择多个文件
    4. Title = "请选择文件夹",
    5. Filter = "文件(*.xml,*.txt)|*.xml;*.txt"
    6. };
    7. if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    8. {
    9. fileName = dialog.FileName;
    10. }
    11. if (fileName.Contains("txt"))
    12. {
    13. readFileForm.StrValue = FormatTxtText(dialog.FileName);
    14. }
    15. }
    16. readFileForm.Text = dialog.SafeFileName;