1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#で他フォームのコントロールを参照する

Last updated at Posted at 2023-02-08

1. はじめに

  • SplitContainerコントロール内のパネルにフォームをセットしたい
  • SplitContainerコントロール内のフォーム間のデータを参照、更新したい

2. 子フォームを準備する

3.1. 新しいフォームを作成する

  • Sub1, Sub2の2つのフォームを準備
    image.png

3.2. コンストラクタに親フォームを受けるようにする

namespace WinFormsApp1
{
    public partial class Sub1 : Form
    {
        // メインフォームのプライベート変数
        private Main _main;
        public Sub1(Main main)
        {
            InitializeComponent();

            // コンストラクタで変数にセット
            _main = main;
        }
    }
}

3.3. FormBorderStyleにNoneをセットする

image.png

  • タイトルバーが非表示になる
    image.png

3.4. 動作確認用にボタンを追加する

image.png

namespace WinFormsApp1
{
    public partial class Sub1 : Form
    {
        // メインフォームのプライベート変数
        private Main _main;
        public Sub1(Main main)
        {
            InitializeComponent();

            // コンストラクタで変数にセット
            _main = main;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _main.Text = "Sub1";
        }
    }
}

4. メインフォームの準備

4.1. SplitContainerを配置する

image.png

image.png

4.2. Loadイベントを修正して、子フォームに親フォームを渡すようにする

  • SplitContainerにフォームをAddする場合、TopLevelプロパティをfalseにする必要がある
namespace WinFormsApp1
{
    public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void Main_Load(object sender, EventArgs e)
        {
            // 子フォームを作成
            Sub1 sub1 = new Sub1(this);
            Sub2 sub2 = new Sub2(this);

            // TopLevelプロパティにfalseをセット
            sub1.TopLevel = false;
            sub2.TopLevel = false;

            // パネルにセット
            splitContainer1.Panel1.Controls.Add(sub1);
            splitContainer1.Panel2.Controls.Add(sub2);

            // 子フォームを表示
            sub1.Show();
            sub2.Show();
        }
    }
}

4.3. 親フォームのコントロールにアクセスする場合

  • コントロールのModifiersプロパティがprivateだとアクセスできないので、public等に変更する
    image.png

5. 操作確認

  • 起動時
    image.png

  • ボタンクリック時
    image.png

  • タイトルがSub1に変更できた

6. 参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?