• C#开发 WinForm如何在选项卡中集成加载多个窗体 实现窗体复用


    http://blog.csdn.net/upi2u/article/details/37914909

    最近需要做的一个项目,为了避免从菜单中选择的麻烦,需要把几个窗体集成到一起,通过TabControl选项卡来切换,这样的设计实现在一定程度上也是实现了代码的复用,扩展思路来说我们可以把一些小的功能做到窗体里在需要的时候在容器中加载即可,这样也可以避免使用用户控件时经常报错的问题。这个功能和之前做的一个通过菜单选择将窗体加载到选项卡中类似,不同的是激发的源头不同,我们来看一下吧。

    项目文件组织:

    主程序界面:

    将tabControl1中的两个选项页的tag分别写上form2和form3的类名称。

    被包含窗体Form2:

    被包含窗体Form3:

    运行结果:from2和form3两个窗体都集成到form1中的选项卡中显示:

    Form1实现代码:

    [csharp] view plain copy print?
    using System;  
    using System.Collections.Generic;  
    using System.ComponentModel;  
    using System.Data;  
    using System.Drawing;  
    using System.Linq;  
    using System.Reflection;  
    using System.Text;  
    using System.Windows.Forms;  
      
    namespace tabWindowTest  
    {  
        public partial class Form1 : Form  
        {  
            public int[] s = {0, 0};         //用来记录from是否打开过  
      
            public Form1()  
            {  
                InitializeComponent();  
            }  
      
            private void Form1_Load(object sender, EventArgs e)  
            {  
                //初始打开时就加载Form2  
                string formClass = "tabWindowTest.Form2";  
                GenerateForm(formClass, tabControl1);  
            }  
      
            private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)  
            {  
                if(s[tabControl1.SelectedIndex]==0)    //只生成一次  
                {  
                    btnX_Click(sender, e);  
                }  
            }  
      
            /// <summary>  
            /// 通用按钮点击选项卡 在选项卡上显示对应的窗体  
            /// </summary>  
            private void btnX_Click(object sender, EventArgs e)  
            {  
                string formClass = ((TabControl)sender).SelectedTab.Tag.ToString();  
      
                //string form = tabControl1.SelectedTab.Tag.ToString();  
      
                GenerateForm(formClass, sender);  
      
            }  
      
      
            //在选项卡中生成窗体  
            public void GenerateForm(string form, object sender)  
            {  
                // 反射生成窗体  
                Form fm = (Form)Assembly.GetExecutingAssembly().CreateInstance(form);  
      
                //设置窗体没有边框 加入到选项卡中  
                  fm.FormBorderStyle = FormBorderStyle.None;  
                fm.TopLevel = false;  
                fm.Parent = ((TabControl)sender).SelectedTab;  
                fm.ControlBox = false;  
                fm.Dock = DockStyle.Fill;  
                fm.Show();  
      
                s[((TabControl)sender).SelectedIndex] = 1;  
      
            }  
        }  
    }

  • 相关阅读:
    Android开发之适配器-ListView适配器的重复数据
    Android开发之TextView的下划线添加
    Android 自定义View修炼-Android开发之自定义View开发及实例详解
    Android 开发之自定义Dialog及UI的实现
    Android开发之ContentProvider(内容提供者)
    XC文件管理器(Android应用)
    高效 告别996,开启java高效编程之门 4-1普通码农与风骚码农资源关闭PK
    高效 告别996,开启java高效编程之门 4-2垃圾回收与物理资源释放
    高效 告别996,开启java高效编程之门 3-29实战案例五:排序
    高效 告别996,开启java高效编程之门 3-28实战案例四:分组
  • 原文地址:https://www.cnblogs.com/Echo529/p/6382420.html
Copyright © 2020-2023  润新知