複数のユーザーコントロールを切り替えて表示する

複数のユーザーコントロールを切り替えて表示するコードを紹介します。

概要

こちらの記事では、ユーザーコントロールを作成してフォームに配置して利用するコードを紹介しました。この記事では、複数のユーザーコントロールを用意しユーザーコントロールの表示を切り替えるコードを紹介します。複数のユーザーコントロールの表示を切り替えることで、1つのウィンドウ内で画面の表示を切り替える処理をシンプルに実装できます。

プログラム例

UI

Windows Formアプリケーションを作成します。メインのフォームに加え、UserControlを3つ作成します。
複数のユーザーコントロールを切り替えて表示する:画像1

ユーザーコントロールの名前は"UserContorl1", "UserControl2", "UserControl3" とします。
複数のユーザーコントロールを切り替えて表示する:画像2

UserContorl1は下図のデザインとします。テキストボックスとボタンを配置します。
複数のユーザーコントロールを切り替えて表示する:画像3

UserControl2は下図のデザインとします。プログレスバーとボタンを配置します。
複数のユーザーコントロールを切り替えて表示する:画像4

UserControl3は下図のデザインとします。チェックボックスを配置します。
複数のユーザーコントロールを切り替えて表示する:画像5

ビルドすると、ツールボックスにプロジェクト名のグループが追加され、UserContorl1, UserContorl2, UserContorl3

複数のユーザーコントロールを切り替えて表示する:画像6

メインのフォームを作成します。ボタンを3つと、Panelを配置します。Panelの内部に UserContorl1, UserContorl2, UserContorl3 を配置します。
複数のユーザーコントロールを切り替えて表示する:画像7

PanelのAnchor プロパティを Bottom, Left, Right, Top に設定します。
複数のユーザーコントロールを切り替えて表示する:画像8

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SwitchUserControl
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();

      userControl11.Visible = true;
      userControl11.Dock = DockStyle.Fill;

      userControl21.Visible = false;
      userControl31.Visible = false;
    }

    private void button1_Click(object sender, EventArgs e)
    {
      userControl21.Visible = false;
      userControl31.Visible = false;

      userControl11.Visible = true;
      userControl11.Dock = DockStyle.Fill;
    }

    private void button2_Click(object sender, EventArgs e)
    {
      userControl11.Visible = false;
      userControl31.Visible = false;

      userControl21.Visible = true;
      userControl21.Dock = DockStyle.Fill;

    }

    private void button3_Click(object sender, EventArgs e)
    {
      userControl11.Visible = false;
      userControl21.Visible = false;

      userControl31.Visible = true;
      userControl31.Dock = DockStyle.Fill;
    }
  }
}

解説

フォームの初期表示時に下記のコードが実行されます。フォームに設置したuserControl1のVisibleプロパティをtrueに設定し画面に表示します。また、DockプロパティをDockStyle.Fillに設定することで、PanelいっぱいにuserControl1を表示します。userControl2, userControl3 はVisible プロパティをfalseに設定し非表示にします。

  userControl11.Visible = true;
  userControl11.Dock = DockStyle.Fill;

  userControl21.Visible = false;
  userControl31.Visible = false;


Button1, Button2, Button3 のクリックイベントは下記になります。
Button1がクリックされた場合は、userControl1を表示し、userControl2, userControl3を非表示にします。同様に、Button2がクリックされた場合は、userControl2を表示し、userControl1, userControl3を非表示にします。Button3がクリックされた場合は、userControl3を表示し、userControl1, userControl2を非表示にします。userControlの表示時には、DockプロパティをDockStyle.Fillに指定し、Panel1 いっぱいにuserControlを表示します。

private void button1_Click(object sender, EventArgs e)
{
  userControl21.Visible = false;
  userControl31.Visible = false;

  userControl11.Visible = true;
  userControl11.Dock = DockStyle.Fill;
}

private void button2_Click(object sender, EventArgs e)
{
  userControl11.Visible = false;
  userControl31.Visible = false;

  userControl21.Visible = true;
  userControl21.Dock = DockStyle.Fill;
}

private void button3_Click(object sender, EventArgs e)
{
  userControl11.Visible = false;
  userControl21.Visible = false;

  userControl31.Visible = true;
  userControl31.Dock = DockStyle.Fill;
}

実行結果

プロジェクトを実行すると下図のウィンドウが表示されます。3つのボタンの下に配置したPanel内は、userContorl1が表示されます。
複数のユーザーコントロールを切り替えて表示する:画像9

[button2]をクリックします。ボタンの下部のPanelの表示内容がuserControl2のものに変わります。
複数のユーザーコントロールを切り替えて表示する:画像10

同様に[button3]をクリックすると、下部のPanelの表示内容がuserControl3のものに変わります。
複数のユーザーコントロールを切り替えて表示する:画像11

[button1]をクリックすると、userControl1の内容に変わります。
複数のユーザーコントロールを切り替えて表示する:画像12

補足

userControlは表示、非表示が切り替わるだけのため、テキストボックスに入力されて文字列は、他のuserControlに切り替えた後で元のuserContorlに戻ってきた場合、テキストボックスに入力された文字列は保持された状態になります。
複数のユーザーコントロールを切り替えて表示する:画像13 複数のユーザーコントロールを切り替えて表示する:画像14

別のuserControlを表示した後で元のuserControlを表示すると、もともとテキストボックスに入力されていた「ぺんぎん」の文字列は保持された状態のままとなっています。
複数のユーザーコントロールを切り替えて表示する:画像15


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2018-04-03
Copyright © 1995–2025 iPentec all rights reserverd.