Maison  >  Article  >  développement back-end  >  Développement C# Comment WinForm intègre et charge plusieurs formulaires dans des onglets pour obtenir une explication détaillée de la réutilisation des formulaires (image)

Développement C# Comment WinForm intègre et charge plusieurs formulaires dans des onglets pour obtenir une explication détaillée de la réutilisation des formulaires (image)

黄舟
黄舟original
2017-03-10 14:10:593129parcourir

Un projet que je dois réaliser récemment, afin d'éviter les problèmes de sélection dans le menu, plusieurs formulaires doivent être intégrés ensemble et commutés via l'onglet TabControl. Cette implémentation de conception permet également dans une certaine mesure la duplication de code. et en étendant l'idée, nous pouvons mettre quelques petites fonctions dans le formulaire et les charger dans le conteneur en cas de besoin. Cela peut également éviter le problème des erreurs fréquentes lors de l'utilisation des contrôles utilisateur. Cette fonction est similaire à la précédente consistant à charger un formulaire dans un onglet via la sélection du menu. La différence est que la source de stimulation est différente.

Organisation des fichiers du projet :

Interface principale du programme :

Dans tabControl1 Écrire les noms de classe de form2 et form3 sur les balises des deux pages d'options respectivement.

Formulaire contenu Form2 :

Formulaire contenu Form3 :

Résultats d'exécution : les formulaires from2 et form3 sont intégrés dans les onglets du form1 et affichés :

Code d'implémentation du Form1 :

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;

        }
    }
}



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn