フォームを継承した際のコントロールへのフォーカス設定方法

このQ&Aのポイント
  • フォームを継承してコントロールへのフォーカスを設定する方法について質問します。
  • 具体的には、frmParentフォームとfrmChildフォームがあり、frmParentに配置されたbtnTestボタンにフォーカスを設定したいです。
  • btnTest.CanFocusの値がFalseになっているため、フォーカスが正しく設定されていません。ControlStyles.Selectableスタイルビットについても理解できていない状況です。フォーカスを設定する方法を教えてください。
回答を見る
  • ベストアンサー

フォームを継承した際の、コントロールへのフォーカスの設定方法

こんにちは。 フォームを継承した際の、コントロールへのフォーカスの設定方法について質問です。 ※利用しているバージョンは、.NET 2003 です。 1 : フォーム『 frmParent 』と、frmParent を継承したフォーム『 frmChild 』があります。 2 : frmParent には、ボタン『 btnTest 』が配置されています。 3 : frmParent 内で、Load イベントの ハンドラとして、以下を記述します。    Private Sub frmParent_Load( _      ByVal sender As Object, ByVal e As System.EventArgs) _      Handles MyBase.Load      btnTest.Focus()    End Sub 4 : 以下を実行し、frmChild フォームをディスプレイに表示します。    Dim frm As New frmChild    frm.Show() この際、btnTest ボタンにフォーカスが設定された状態でフォームを表示したいのですが、実際はフォーカスが設定されていません。 btnTest.CanFocus の値を調べると、False になっているのですが、なぜ CanFocus が False になるのか理由がわかりません。 ヘルプによると、入力フォーカスを受け取る条件として、  1 : コントロールの ControlStyles.Selectable スタイル ビットが true に設定されていること  2 : コントロールが別のコントロールに格納されていること  3 : すべての親コントロールが表示されており、有効であること と書いてあったのですが、1 がよくわかりません。 根本的に考え方が間違えているのかもしれません…。 フォーカスを設定する方法をご教示ください。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

(っ・ω・)っ旦~お茶ドーゾ

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/226winloadfocus/winloadfocus.html
kurage-fuwari
質問者

お礼

参考URLを拝見させていただき、作成できました! フォームを継承している事は関係なかったんですね。 有難うございました(^^)

関連するQ&A

  • サブフォームのTab移動について

    VB2005で開発を行っております。 とあるサイトでMDIとは別の方法でフォーム内にフォームを貼り付けることができることを知りました。 以下がその簡単なコードです。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim f As New Form2() f.TopLevel = False Me.Controls.Add(f) f.Show() f.BringToFront() End Sub End Class ここでそれぞれのフォームにTextBoxなどのコントロールを貼り付け、Tabキーによるフォーカス移動を行うと、Form1のコントロールからForm2のコントロールへの移動は行えるのですが、その後はForm2のコントロール内のみフォーカス移動が行われてしまいます。 できればForm2がGroupBoxやPanelコントロールのように動作してほしいのですが、どのようにすればよいでしょうか?

  • focusメソッドを使ってもカーソルが点滅しない

    フォームをロードし、下記のようにしてもカーソルが点滅しません。その解決方法を教えてください。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Focus() End Sub

  • フォーム上の任意のコントロール上でのイベントをまとめてハンドリングする方法

    .NETにおいて、フォーム上に配置されたコントロールで発生したイベントを、各コントロールごとではなくて、まとめてハンドルする方法はないでしょうか。 例えば次のようなフォームがあります。 (Button1, Button2, Button3は、フォームに配置されたボタンとします) Public Class MyForm   Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click   End Sub End Class ボタンが3つ程度の場合はこれで良いと思うのですが、例えば(極端に言えば)ボタンが100個ある場合、 Handles Button1.Click, Button2.Click, (途中省略.....) Button100.Click と書くしかないのでしょうか。 後で対象コントロールが増えたり減ったりした場合に間違いが起こりそうなので、このような書き方は避けたいです。 フォーム上のどのコントロールでも構わないからとにかくクリックイベントが発生したことを知るための方法はないでしょうか。 例えば次のようなかんじでハンドリングできないでしょうか。 Private Sub All_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォーム上の任意のコントロールでのClickイベント End Sub (環境はVB.NET2005です)

  • VB6 ユーザーコントロールのフォーカス無効

    現在VB6 SP5にて、テンキーのようなユーザーコントロールを作成しています。 コマンドボタンを配置し、押された場合にキーボードの入力をエミュレートするような作りにしています。 問題は、作成したコントロールをフォームに貼り付けて使用する場合に、マウスでクリックしたキーに応じて、現在フォーカスのあるテキストボックスなどに入力したいのですが、ユーザーコントロールのコマンドボタンにフォーカスが移ってしまい、うまくいきません。 ユーザーコントロールのCanGetFocusプロパティをFalseに設定しようとすると、「フォーカスを取得できないコントロール上に配置された子コントロールは、フォーカスを取得することができません。」とエラーが表示されてFalseにできません。 フォーカスを無効にし、このような機能を実現するには何か良い方法ありますでしょうか?

  • MDIの子フォームでフォーカスアウトを制御したい

    MDIの子フォームでフォーカスアウトを制御したい VB2005で開発を行っています。 ・MDIの子フォームA、Bが存在します。 ・子フォームA、Bともに、表示されています。 ・子フォームAにはテキストコントロールAA、ABの2つが存在します。 ・テキストコントロールAAのLostFocus()に、テキストコントロールAA.Focus()が  記されています。 この状態で、子フォームAのテキストコントロールAAからABへフォーカスが移った時、 コントロールAAのLostFocus()で制御するのはうまくいきます。 が、子フォームAのテキストコントロールAAから子フォームBへフォーカスが移った時、 コントロールAAのLostFocus()が動作しますが、無限ループっぽい動きに陥ったり、 子フォームAにフォーカスが設定されません。 子フォームを最小化させたり、全然関係のないアプリケーションやデスクトップに フォーカスを遷移したあとにフォーカスを戻してみても同じような現象になります。 イメージとしては、フォーカスアウトでエラーになったんだから、フォーカスを移し たくないです。 Private Sub ControlAA_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs)  If "".Equals(ControlAA.Text) Then   MessageBox.Show("hoge")   ControlAA.Focus()   Return  End If End Sub フォーカスアウト時に項目チェックなどをやる関係で、どうしてもLostFocus()上で 処理をやらなければならないと思われるのですが、フォーカスアウトされた時のオペ レーションの違いに限らず上手く制御させる方法はありませんでしょうか? 調べてはみましたが、MDIの概念でそもそもそういうことするなというような事らしいですが、 フォーカスアウト時に検索処理が走るというような仕様の為、どうしても解決させたいです。

  • フォームコントロールのボタン設定

    ExcelのVBAで、ActiveX コントロールのボタンは、 CommandButton1.Enabled=False のようにして押せなくできますが、 フォームコントロールのボタンの場合でも、押せなくなる設定をすることは可能ですか?

  • 標準モジュールからフォームをコントロールしたい

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、button1をクリックすると、共通モジュールのサブルーチンを呼び出します。そして引数"0"を渡すと、Form1のListBox1に"hello"を追加したいのです。 実行させると、エラーはでないのですが、追加されるはずの"hello"がListBox1に追加されません。 たぶん     frm1.ListBox1.Items.Add("hello") あるいは    Dim frm1 As New Form1() あたりの宣言の仕方がまずいのだと思うんですが... どなたか、ご教授よろしくお願いします。 ■共通モジュール Module Module1 Dim frm1 As New Form1() Sub PC(ByVal PCrecieve As String) If PCrecieve = "0" Then frm1.ListBox1.Items.Add("hello") End If End Sub End Module ■フォーム Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call PC("0") End Sub End Class

  • 継承したコントロールのイベント

    VB2005を使用しています。 form1にbutton1が設置(ツールボックスからの貼り付け)されているとして、 form2で継承「Inherits form1」します。でリビルド。 この時点で、form2はform1と全く同じデザインです。 form2で継承したbutton1は  Public Class Form2   ~  End Class 内で Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click のようにイベントを設定できないのでしょうか? いろいろ検索等はして、「オーバライド」なるものがあることはわかったのですが、具体的な使い方などが全くわかりません。 できれば簡単なコードなんかを教えていただければとても助かるのですが。オーバーライド以外でもなにか可能な方法があれば是非アドバイスください。 宜しくお願いいたします。

  • エクセル フォームを開いたときにどこにもフォーカス

    エクセル フォームを開いたときにどこにもフォーカスを当てたくない 図のように、UserForm1の上にTextBox1とTextBox2を設置しました。 このまま、F5を押して実行すると、 TextBox1にフォーカスが当たるのですが、 どこにもフォーカスを充てずにフォームを表示する方法はありますか? 見えないコントロールを作って、SetFocusをそこに充てるしかないのでしょうか?

  • ユーザーがクリックするまでフォーカスをつけない方法(Access VBA)

    こんにちは。 AccessVBAですが、ユーザーフォーム上で、 ユーザーが、コントロールをクリックするまで、 フォーカスを設定しない方法は、あるでしょうか。 テキストにフォーカスされたときの黒反転が、 綺麗でないので、フォーカスさせたくありません。 フォームを開いたときに、強引にボタンにフォーカス する、方法もありますが、ボタンのないフォーム ですと、この方法が使えません。 何か、いい方法がありましたら、教えてください。 お願いします。

専門家に質問してみよう