最近行う必要があるプロジェクトでは、メニューから選択する手間を避けるために、いくつかのフォームを統合し、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 サイトの他の関連記事を参照してください。