C#でフォームがあるクラスとは別のクラスにあるメソッドからフォームを操作する方法を解説します。
事前準備
まずは、動作確認するためのテキストボックスとボタンだけのフォーム画面を作成します。
上記フォームのソースコード(Form1.Designer.cs)です。
namespace WinFormsApp1
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
textBox1 = new TextBox();
button1 = new Button();
SuspendLayout();
//
// textBox1
//
textBox1.Location = new Point(12, 12);
textBox1.Name = "textBox1";
textBox1.Size = new Size(270, 23);
textBox1.TabIndex = 2;
//
// button1
//
button1.Location = new Point(303, 12);
button1.Name = "button1";
button1.Size = new Size(75, 23);
button1.TabIndex = 3;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(392, 44);
Controls.Add(button1);
Controls.Add(textBox1);
Name = "Form1";
Text = "Form1";
ResumeLayout(false);
PerformLayout();
}
#endregion
internal TextBox textBox1;
private Button button1;
}
}
サンプルコード
別クラスのメソッドからフォームを操作するためのソースコードです。
ここでは例として、ボタン押下時、テキストボックスに文字が入力されるようにします。
また、テキストボックスは「Form1.cs」で作成し、文字の入力処理は別クラスとなる「Util.cs」に作成します。
実行イメージ
後述する方法を実装すると、ボタンを押すことで、テキストボックスにテストと表示されるようになります。
static修飾子を使用する方法
コントロールにstatic修飾子を付けることでも別クラスからアクセスすることが可能です。
下記は、テキストボックスにstatic修飾子を付けた例です。(修正ファイルは「Form1.Designer.cs」)
~~~省略~~~
private Button button1;
internal static TextBox textBox1;
~~~省略~~~
static修飾子を付けたテキストボックスにアクセスするには以下のように記述します。
public void Exec() { Form1.textBox1.Text = "テスト"; }
コメント