C# 開発 WinForm が複数のフォームをタブに統合してロードし、フォームの再利用の詳細な説明を実現する方法 (図)

黄舟
リリース: 2017-03-10 14:10:59
オリジナル
3116 人が閲覧しました

最近行う必要があるプロジェクトでは、メニューから選択する手間を避けるために、いくつかのフォームを統合し、TabControl タブを通じて切り替える必要があります。この設計の実装では、ある程度のコードの再利用も実現します。これにより、ユーザー コントロールを使用するときに頻繁に発生するエラーの問題を回避することもできます。この機能は、メニュー選択を通じてフォームをタブにロードする前述の機能に似ています。違いは、刺激のソースが異なることです。

プロジェクトファイル構成:

メインプログラムインターフェース:

tabControl1の2つのオプションページのタグにform2とform3のクラス名をそれぞれ書き込みます。

含まれるフォーム Form2:

含まれるフォーム Form3:

操作結果: from2 と form3 の両方のフォームが form1 のタブに統合され、表示されます:

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;

        }
    }
}
ログイン後にコピー



以上がC# 開発 WinForm が複数のフォームをタブに統合してロードし、フォームの再利用の詳細な説明を実現する方法 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート