Windowsアプリケーションのフォームのフォーカスについて

Windowsアプリケーションのフォームのフォーカスについて

Windowsフォームアプリケーションを、C/C++で作成しています。

開発環境:Visual C++ 2008 Express Edition
OS:WindowsXP

テキストボックスに入力され、
フォーカスアウトした時に入力値の判定し、
偽だった時はボタンを非アクティブにする処理を実装しています。

しかし、タブ移動でのフォーカスアウトは可能なのですが、
フォームにマウスクリックした時にフォーカスが変わりません。

フォームにフォーカスを持たせることはできないのでしょうか?
また、何か良い方法があったら教えていただけると幸いです。
宜しくお願いします。

投稿日時 - 2010-06-23 14:08:34

QNo.5989288

すぐに回答ほしいです

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

FormのCanFocusプロパティがfalseを返すので、フォームにフォーカスを持たせることはできないように思います。

代わりにFormにコードを追加して、フォームの表面が左クリックされたら、TextBoxのフォーカスをなくすことはできます。(コードを参照)

ただしこのコードでは、フォーム以外のコントロールに対するイベントを取得できません。
たとえば、ラベルのようにフォーカスを受け付けないコントロール上でのクリックに対応するためには、まだ工夫が必要です。

static const Int32 WM_LBUTTONDOWN = 0x0201;
virtual void WndProc(Message% m) override
{
  // TextBoxにフォーカスがあり、
  if (this->textBox1->Focused)
  {
    // TextBox以外のウインドウに対して、
    if (this->textBox1->Handle != m.HWnd)
    {
      // 左ボタン押下であれば、
      if (m.Msg == WM_LBUTTONDOWN)
      {
        //フォームのActiveControlを解除する。(ここで、Leaveイベントが呼ばれる)
        this->ActiveControl = nullptr ;
      }
    }
  }
  __super::WndProc(m) ;
}

投稿日時 - 2010-06-23 16:21:03

お礼

返事が遅くなってすいません。
ありがとうございます!
大変助かりました。
CanvasShoesさんのコードを参考に
以下のように実装しました。

//フォームクリックイベント
VOID 画面クラス::フォーム_MouseClick(
System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e)
{
// テキストボックスにフォーカスが当たっている場合
if( テキストボックス1->Focused
|| テキストボックス2->Focused
|| テキストボックス3->Focused
){
// 左ボタンがクリックされた場合
if( e->Button == ::MouseButtons::Left ){
this->ActiveControl = nullptr;
}
}
}

尚、この画面の構成は以下のようになってます。
フォーム
テキストボックス×3
ラベル×12
グループボックス×1
ボタン×2

これで、フォームクリック時の問題は解決しました。
ボタンクリック時はクリックイベントで
なんとかなるので問題ありません。

問題はラベルとグループボックスですが…
上長と相談して仕様を決めていきたいと思います。

追伸:今回初めてココを利用したのですが、
CanvasShoesさんのようにわかりやすく
教えて下さる方がいて、これからも利用しようと思いました。
まあ、利用する必要がなければ
それにこしたことはないのですが(^^;)

自分も他のかたにアドバイスできるように
スキルを磨いていきたいと思います!
本当にありがとうございました。

投稿日時 - 2010-06-24 17:38:30

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.1

入力値の判定はどこに記述しているのでしょうか?

ぱっと思いつくやり方は、テキストボックスにLeaveイベントもしくはLostFocusイベントを登録してそこで判定する方法ですが・・・

投稿日時 - 2010-06-23 15:49:39

あなたにおすすめの質問

[PR] お役立ち情報