「Windowsアプリケーションで、フォームロード(Form_Load)時にコントロールにフォーカスするのはどうしたらいいの?」
「フォームロード(Form_Load)時にコントロールにフォーカスを設定してもフォーカスされないんだけど・・・・。」
こんなことを悩んでいませんか?
こういった疑問に答えます。
今日は「Windowsアプリケーションで、フォームロード(Form_Load)時にコントロールにフォーカスする方法」について紹介します。
なぜ、フォームロード(Form_Load)時にフォーカスされないの?
よくあるソースコード
こんなデザインで、下側にあるテキストボックスのtextBox2にフォーカスしたいとします。
よく見るコードは、こんな感じになっています。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// フォームロード
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
textBox2.Focus();
}
}
実行結果はこうなります。
textBox1がフォーカスされています。
Form1_Loadイベント内で、textBox2.Focus();と書いてあるのにフォーカスがセットされません。
フォーカスされない理由
実は答えは簡単なんです。イベントを間違えているだけです。
正しいイベントでtextBox2.Focus();と書けばちゃんとフォーカスされます。
次で、正しいフォーカスの方法を説明します。
【C#】ロード時にフォーカスする方法
正しいソースコード
正しいイベントでフォーカスをセットする方法をご紹介します。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// フォームロード
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
//textBox2.Focus(); ←ここではない。
}
/// <summary>
/// フォーム Shown
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Shown(object sender, EventArgs e)
{
textBox2.Focus(); //←ここです。
}
}
実行結果はこうなります。
きちんとtextBox2がフォーカスされています。
Form1_Shownイベント内で、textBox2.Focus();を書けばフォーカスがセットされます。
まとめ
C#や.NETでWindowsアプリケーションを作るときはイベントの制御ができるかどうかがけっこうなコツです。
ここを知っているか知らないかでコーディングする時間や調べる時間に差ができたりします。
form(フォーム)を継承して派生クラスのイベントを先に処理する方法が知りたい方は「【C#】formを継承して派生クラスのイベントを先に処理」が参考になると思います。
綺麗なソースコードを書きたい!と思っている初心者の方は「【C#】初心者が綺麗なコードを書くコツ Tips」をどうぞ。
スキルアップしたい初心者プログラマの方は「初心者プログラマがスキルアップするための方法」の記事もどうぞ。
それでは、また。
こちらの記事も読まれています!
- 初心者プログラマがスキルアップするための方法
- プログラマーが成長するためのコツ【2つの行動で説明】
- エンジニア 初心者が後悔しないためにやるべきこと!
- 【経験ゼロの初心者向け】プログラミングの始め方
- プログラミングの独学は挫折率9割。たった1つの理由と解決方法(姉妹サイト)