
Windowsアプリケーションのフォームのフォーカスについて
Windowsフォームアプリケーションを、C/C++で作成しています。
開発環境:Visual C++ 2008 Express Edition
OS:WindowsXP
テキストボックスに入力され、
フォーカスアウトした時に入力値の判定し、
偽だった時はボタンを非アクティブにする処理を実装しています。
しかし、タブ移動でのフォーカスアウトは可能なのですが、
フォームにマウスクリックした時にフォーカスが変わりません。
フォームにフォーカスを持たせることはできないのでしょうか?
また、何か良い方法があったら教えていただけると幸いです。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
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) ;
}
返事が遅くなってすいません。
ありがとうございます!
大変助かりました。
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さんのようにわかりやすく
教えて下さる方がいて、これからも利用しようと思いました。
まあ、利用する必要がなければ
それにこしたことはないのですが(^^;)
自分も他のかたにアドバイスできるように
スキルを磨いていきたいと思います!
本当にありがとうございました。
No.1
- 回答日時:
入力値の判定はどこに記述しているのでしょうか?
ぱっと思いつくやり方は、テキストボックスにLeaveイベントもしくはLostFocusイベントを登録してそこで判定する方法ですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- 一眼レフカメラ 一眼レフ Canon 5D mark4 の4K動画撮影 ピントが背景に持っていかれる 2 2023/05/10 22:52
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) Accessで独自メニューバーまたはリボンを作成したい 1 2022/12/02 14:31
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(IT・Webサービス) micro soft teamsのカメラ設定について 1 2023/05/25 18:07
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FLASH広告
-
あるサイトが思い出せないんで...
-
他の人には声だして挨拶してる...
-
別ウィンドウで開くページを作...
-
中古本の店名ハンコの消し方
-
マイクラのマルチサーバーが起...
-
油性マジックで書いたサインを...
-
池袋サンシャイン通りでキャッ...
-
MFCでコンボボックスを選択不可...
-
VBAのExitイベントについて
-
三菱シーケンサで時計制御(時...
-
どこにもフォーカスを当てたくない
-
矢印(左右)キーでイベントを...
-
ATHLON64 4000+ とathlon64 x2...
-
Flash SEO web制作
-
VBAでのユーザーフォーム上...
-
Flashで画像を横にスライドする...
-
「ただ今読み込み中です」とい...
-
アクセス フォーカスの移動...
-
Private Sub内でSubをCallしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
他の人には声だして挨拶してる...
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
矢印(左右)キーでイベントを...
-
業務に差し支えのないテンキー...
-
Private Sub内でSubをCallしたい
-
エクセルVBA テキストボックス...
-
GridViewでハイライトを使用し...
-
テキストボックス入力後、警告...
-
プログラムからTera Termに文字...
-
コマンドボタンのEnterイベント...
-
MFCでコンボボックスを選択不可...
-
VB.NET ボタン押下で一つ前の...
-
油性マジックで書いたサインを...
-
Accessの更新後処理で特定の条...
-
DateTimePicker のEnable
-
スプレットシートでフォーカス...
-
VC++2010のラジオボタンの選択...
-
油性マジックの消し方
おすすめ情報