DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

現在アクティブなコントロールを取得する、指定したコントロールをアクティブにする

現在アクティブなコントロールを取得する

現在アクティブな(選択されている、フォーカスのある)コントロールを取得するには、ContainerControl.ActiveControlプロパティを使用します。

[VB.NET]
Console.WriteLine("現在選択されているコントロールは、{0}です。", _
    Me.ActiveControl.Name)
[C#]
Console.WriteLine("現在選択されているコントロールは、{0}です。",
    this.ActiveControl.Name);

ただし、別のフォームのActiveControlプロパティを参照することはできません。この場合は、「別のフォームのデータを取得、設定する」で紹介した方法を使って取得します。

あるコントロールがアクティブであるかは、Control.Focusedプロパティで調べることができます。

[VB.NET]
If TextBox1.Focused Then
    Console.WriteLine("TextBox1にフォーカスがあります。")
Else
    Console.WriteLine("TextBox1にフォーカスがありません。")
End If
[C#]
if (TextBox1.Focused)
    Console.WriteLine("TextBox1にフォーカスがあります。");
else
    Console.WriteLine("TextBox1にフォーカスがありません。");

指定したコントロールをアクティブにする

指定したコントロールをアクティブにする(選択する、フォーカスを移す)ための方法はいくつかあります。

最も基本的な方法は、Control.Selectメソッドを呼び出す方法です。例えば、TextBox1をアクティブにするには、次のようにします。

[VB.NET]
'TextBox1をアクティブにする
TextBox1.Select()
[C#]
//TextBox1をアクティブにする
TextBox1.Select();

補足:コントロールには、アクティブにすることのできないコントロールもあります。アクティブにできないコントロールは、Panel、GroupBox、PictureBox、ProgressBar、、Splitter、Label、リンクが存在しないLinkLabelです。あるコントロールがアクティブにできるかを調べるには、Control.CanSelectプロパティを使用します。

Control.Focusメソッドを使用しても同じことができますが、Focusメソッドは主にカスタムコントロールなどで使用されます。

[VB.NET]
'TextBox1をアクティブにする
TextBox1.Focus()
[C#]
//TextBox1をアクティブにする
TextBox1.Focus();

フォームなどのコンテナにあるコントロールを選択するには、ContainerControl.ActiveControlプロパティを使用する方法もあります。

例えば、フォームにあるTextBox1をフォームクラスからアクティブにするには、次のようにします。

[VB.NET]
'TextBox1をアクティブにする
Me.ActiveControl = TextBox1
[C#]
//TextBox1をアクティブにする
this.ActiveControl = TextBox1;

タブオーダーで次のコントロールをアクティブにする

タブオーダーで次のコントロールをアクティブにするには、Control.SelectNextControlメソッドを使用します。

現在選択されているコントロールの次のタブオーダーのコントロールを選択するには、次のようにします。

[VB.NET]
'次のコントロールを選択する
Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
[C#]
//次のコントロールを選択する
this.SelectNextControl(this.ActiveControl, true, true, true, true);

SelectNextControlメソッドの一番目のパラメータには、基準となるコントロールを指定します。2番目のパラメータには、タブオーダーが次のコントロールをアクティブにするか、前のコントロールをアクティブにするかを指定します。つまり、これをFalseにすると、Shiftキーを押しながらTabキーを押した時のようになります。3番目のパラメータにはTabStopがFalseのコントロールを無視するかを、4番目のパラメータには子コントロールの子コントロールも含めるかを、5番目のパラメータにはタブオーダーの最後のコントロールが選択されている時に最初に戻るかを指定します。詳しくは、「Control.SelectNextControl メソッド」をご覧ください。

Control.GetNextControlメソッドでタブオーダーが次のコントロールを取得して、Selectメソッドで選択するという方法もあります。ただしこの場合は、タブオーダーが最後のコントロールはGetNextControlメソッドでnullを返すことに注意してください。

[VB.NET]
'次のコントロールを取得する
Dim nextControl As Control = Me.GetNextControl(Me.ActiveControl, True)
'次のコントロールを選択する
If Not (nextControl Is Nothing) Then
    nextControl.Select()
End If
[C#]
//次のコントロールを取得する
Control nextControl = this.GetNextControl(this.ActiveControl, true);
//次のコントロールを選択する
if (nextControl != null)
    nextControl.Select();