• C# Winform内嵌窗体(在主窗体上显示子窗体)


            在开发Winform项目中,经常会要切换不同的窗体。通常程序都有一个主窗体,在切换窗体时往往需要关闭其他子窗体,这个实例就来介绍MDI主窗体内嵌子窗体的实现方法。

    MDI主窗体要设置一个比较重要的属性,IsMdiContainer=true。子窗体的 formChild.MdiParent设置成为主窗体。

    1. public MainForm()
    2. {
    3. InitializeComponent();
    4. //设置改窗体为MDI容器(多文档界面容器),可嵌入多个子窗体
    5. this.IsMdiContainer = true;
    6. }
    7. ///
    8. /// 通过子窗体名,打开子窗体
    9. ///
    10. ///
    11. ///
    12. private void OpenChildFrom(string childFromName)
    13. {
    14. bool bHave = false;
    15. //子窗体已存在 则打开
    16. foreach (Form formChild in this.MdiChildren)
    17. {
    18. if (formChild.Name == childFromName)
    19. {
    20. formChild.MdiParent = this;
    21. formChild.Activate();
    22. formChild.StartPosition = FormStartPosition.Manual;
    23. //填满主窗体空间
    24. formChild.Dock= DockStyle.Fill;
    25. formChild.Show();
    26. bHave = true;
    27. }
    28. else
    29. {
    30. formChild.Hide();
    31. }
    32. }
    33. //子窗体不存在 创建并打开
    34. if (bHave == false)
    35. {
    36. Form formChild = InitializeFormByName(childFromName);
    37. if (formChild != null)
    38. {
    39. formChild.MdiParent = this;
    40. formChild.StartPosition = FormStartPosition.Manual;
    41. //填满主窗体空间
    42. formChild.Dock = DockStyle.Fill;
    43. formChild.Show();
    44. }
    45. }
    46. }
    47. ///
    48. /// 用窗体名称字符串 初始化一个窗体
    49. ///
    50. ///
    51. ///
    52. public static Form InitializeFormByName(string formName, string nameSpace = null)
    53. {
    54. // 字符串是完整的类名,包括命名空间
    55. try
    56. {
    57. // 使用反射创建窗体实例
    58. //Type formType = Type.GetType("WinformDemo." + formName);
    59. Type formType = string.IsNullOrEmpty(nameSpace) ? Type.GetType("WinformDemo." + formName) : Type.GetType($"{nameSpace}." + formName);
    60. if (formType != null)
    61. {
    62. return (Form)Activator.CreateInstance(formType);
    63. }
    64. }
    65. catch (Exception ex)
    66. {
    67. // 处理异常,例如类型未找到或创建实例失败
    68. Console.WriteLine("Error: " + ex.Message);
    69. }
    70. return null;
    71. }

    程序实例链接:https://download.csdn.net/download/lvxingzhe3/89422924

  • 相关阅读:
    An error occurred.Faithfully yours, nginx
    SpringMVC 源码分析 以及手写简单的SpringMVC框架
    美食杰项目 -- 登录注册(三)
    前端面试宝典React篇10 与其他框架相比,React 的 diff 算法有何不同?
    Rust源码分析——Rc 和 Weak 源码详解
    算法通关18关 | 回溯模板如何解决复原IP问题
    创建2个线程并执行(STL/Windows/Linux)
    C++ Qt开发:TableView与TreeView组件联动
    samba 部署
    网络流中反向边作用
  • 原文地址:https://blog.csdn.net/lvxingzhe3/article/details/139611374