C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: .netでkillfocusイベントの取得


(過去ログ 75 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■44237 / inTopicNo.1)  .netでkillfocusイベントの取得
  
□投稿者/ takamoto (1回)-(2009/12/02(Wed) 11:35:04)

分類:[.NET 全般] 

VS2005 C++/CLR
.net環境で開発を行っていますが、WM_KILLFOCUSのイベントフック出来ないのでしょうか?
Leaveイベントでは、フォーカスが別のコントロールに移った後に発生する為、想定している制御が出来ません。

何方かご教授ください。
引用返信 編集キー/
■44238 / inTopicNo.2)  Re[1]: .netでkillfocusイベントの取得
□投稿者/ Hongliang (523回)-(2009/12/02(Wed) 12:01:56)
WM_KILLFOCUS に直接対応するイベントは LostFocus ですが、そのタイミングじゃどのみち既にフォーカスが失われた後ですね。
現在の値を検証してそれによってフォーカスの移動をキャンセルしたいなら Validating イベントが用意されていますが。
引用返信 編集キー/
■44239 / inTopicNo.3)  Re[1]: .netでkillfocusイベントの取得
□投稿者/ オショウ (439回)-(2009/12/02(Wed) 12:09:24)
No44237 (takamoto さん) に返信
> VS2005 C++/CLR
> .net環境で開発を行っていますが、WM_KILLFOCUSのイベントフック出来ないのでしょうか?
> Leaveイベントでは、フォーカスが別のコントロールに移った後に発生する為、想定している制御が出来ません。

  メッセージを受け取るタイミングや効果はさておき・・・

		virtual void WndProc(Message% m) override {

			switch(m.Msg) {
				case WM_KILLFOCUS:
					::MessageBeep( MB_OK );
					break;
			}

			DefWndProc(m);

		}

  で、受け取れましたが・・・

※ C++ CLI で、Form1.hに上記コードを追加で!

以上。

引用返信 編集キー/
■44244 / inTopicNo.4)  Re[2]: .netでkillfocusイベントの取得
□投稿者/ takamoto (2回)-(2009/12/02(Wed) 13:35:24)
No44238 (Hongliang さん) に返信
> WM_KILLFOCUS に直接対応するイベントは LostFocus ですが、そのタイミングじゃどのみち既にフォーカスが失われた後ですね。
> 現在の値を検証してそれによってフォーカスの移動をキャンセルしたいなら Validating イベントが用意されていますが。

お世話になります。
Validating イベントを実装しましたが、本イベントもフォーカス移動後に通知されるメッセージです。
私が行いたいのは、フォーカスが移動する前に入力チェックを行い、期待値でなければ別操作を出来ないようにしたいです。
MFC開発時はKillfocusイベントで実装していました。
引用返信 編集キー/
■44245 / inTopicNo.5)  Re[2]: .netでkillfocusイベントの取得
□投稿者/ takamoto (3回)-(2009/12/02(Wed) 13:41:15)
No44239 (オショウ さん) に返信
> ■No44237 (takamoto さん) に返信
>>VS2005 C++/CLR
>>.net環境で開発を行っていますが、WM_KILLFOCUSのイベントフック出来ないのでしょうか?
>>Leaveイベントでは、フォーカスが別のコントロールに移った後に発生する為、想定している制御が出来ません。
>
>   メッセージを受け取るタイミングや効果はさておき・・・
>
> virtual void WndProc(Message% m) override {
>
> switch(m.Msg) {
> case WM_KILLFOCUS:
> ::MessageBeep( MB_OK );
> break;
> }
>
> DefWndProc(m);
>
> }
>
>   で、受け取れましたが・・・
>
> ※ C++ CLI で、Form1.hに上記コードを追加で!
>
> 以上。

お世話になります。

WndProcのオーバーライドも確認しまいしたが、WM_KILLFOCUSに関しては通知が有りません。
WM_PAINTは通知されています。何故だかわかりません。
何か設定などありますか?またCLR/PUREではなく混在です。

引用返信 編集キー/
■44246 / inTopicNo.6)  Re[3]: .netでkillfocusイベントの取得
□投稿者/ オショウ (440回)-(2009/12/02(Wed) 13:48:56)
No44245 (takamoto さん) に返信
> WndProcのオーバーライドも確認しまいしたが、WM_KILLFOCUSに関しては通知が有りません。
> WM_PAINTは通知されています。何故だかわかりません。
> 何か設定などありますか?またCLR/PUREではなく混在です。

  普通に、VisualStudio2008のプロジェクトの新規作成で、
  VisualC++ の、CLRで、Windowsフォームアプリケーション
  を選択し、自動でできたコードのForm1.hに上記を書いた
  だけです〜

  2005で試してみます・・・

  う〜ん・・・ちゃんと動作しました!

  さて何でしょう〜ネ〜

※ 何か別の常駐ソフトとかが悪さしてません?

以上。参考まで・・・
引用返信 編集キー/
■44247 / inTopicNo.7)  Re[4]: .netでkillfocusイベントの取得
□投稿者/ オショウ (441回)-(2009/12/02(Wed) 13:51:29)
2009/12/02(Wed) 13:54:54 編集(投稿者)

追伸・・・

● 別コントロールって記述されてますネ!
  最近、ボケが多い・・・すいません!

  フォーム上のコンロトール間では未確認です。
  何か解れば、またレスします・・・

以上。
引用返信 編集キー/
■44248 / inTopicNo.8)  Re[5]: .netでkillfocusイベントの取得
□投稿者/ takamoto (4回)-(2009/12/02(Wed) 14:23:22)
No44247 (オショウ さん) に返信
> 2009/12/02(Wed) 13:54:54 編集(投稿者)
>
> 追伸・・・
>
> ● 別コントロールって記述されてますネ!
>   最近、ボケが多い・・・すいません!
>
>   フォーム上のコンロトール間では未確認です。
>   何か解れば、またレスします・・・
>
> 以上。

お世話になります。

その通りです。フォームのみの時は、フォームからフォーカスが移る際にKILLFOCUSが通知されますが、
コントロールを配置すると、通知されなくなります。????

どういうことなのでしょう???

引用返信 編集キー/
■44251 / inTopicNo.9)  Re[6]: .netでkillfocusイベントの取得
□投稿者/ オショウ (442回)-(2009/12/02(Wed) 14:37:13)
No44248 (takamoto さん) に返信
> その通りです。フォームのみの時は、フォームからフォーカスが移る際にKILLFOCUSが通知されますが、
> コントロールを配置すると、通知されなくなります。????
>
> どういうことなのでしょう???

  実験中ですが・・・
  結構、邪魔くさいことしないとダメですね・・・多分・・・

  こんなの見つけてますが!?
  http://support.microsoft.com/kb/815774/ja

  CLRになると、もう少しスマートな方法があるのかないのか・・・

以上。途中報告

  
引用返信 編集キー/
■44252 / inTopicNo.10)  Re[7]: .netでkillfocusイベントの取得
□投稿者/ オショウ (443回)-(2009/12/02(Wed) 14:47:59)
できた・・・

方法は、マイクロソフトで掲載されているコードが主なんですが
__gc は、refのままで、コンパイルスイッチも変更せず・・・

TextBoxを継承したSCTextBoxで、WM_KILLFOCUSを取れました。

Pure C++なら、完全なサブクラス化手法で行うんですが・・・
コントロール数が多いと結構面倒なんで、コントロールの継承か
ら再定義すれば、ある意味楽・・・

どっちにせよ、C++的よりも.NET的な楽な方法ないかナ・・・

※ 情報のある方、突っ込みよろしく!

以上。
引用返信 編集キー/
■44254 / inTopicNo.11)  Re[8]: .netでkillfocusイベントの取得
□投稿者/ takamoto (5回)-(2009/12/02(Wed) 14:57:49)
No44252 (オショウ さん) に返信
> できた・・・
>
> 方法は、マイクロソフトで掲載されているコードが主なんですが
> __gc は、refのままで、コンパイルスイッチも変更せず・・・
>
> TextBoxを継承したSCTextBoxで、WM_KILLFOCUSを取れました。
>
> Pure C++なら、完全なサブクラス化手法で行うんですが・・・
> コントロール数が多いと結構面倒なんで、コントロールの継承か
> ら再定義すれば、ある意味楽・・・
>
> どっちにせよ、C++的よりも.NET的な楽な方法ないかナ・・・
>
> ※ 情報のある方、突っ込みよろしく!
>
> 以上。

お世話になります。

記事を拝見しました。サブクラス化する必要があるのですね。
ウィンドプロシージャもオーバーライドする必要がありますし・・・
本当に手間がかかりますね。

私は今回初めて.NET環境で作業を行っていますが、.NET開発者の皆さんは
フォームコントロールの入力制限を行う際は、いかがされているのか疑問です。

テキストボックスに数値しか受付けたくない場合の簡単な制御方法を教えてください。
エラーメッセージ等は表示しません。

引用返信 編集キー/
■44256 / inTopicNo.12)  Re[9]: .netでkillfocusイベントの取得
□投稿者/ オショウ (444回)-(2009/12/02(Wed) 15:11:28)
No44254 (takamoto さん) に返信
> 私は今回初めて.NET環境で作業を行っていますが、.NET開発者の皆さんは
> フォームコントロールの入力制限を行う際は、いかがされているのか疑問です。
>
> テキストボックスに数値しか受付けたくない場合の簡単な制御方法を教えてください。
> エラーメッセージ等は表示しません。

  う〜ん・・・
  いちいち、各コントロール毎に設定しないと要件を満たさないので
  どの道、コントロール数が多いと大変です。(VBもC#もC++も)

  ちょうど、その手のコードが掲載されたものありました。

  http://dobon.net/vb/bbs/log3-27/16175.html

如何?

以上。
引用返信 編集キー/
■44260 / inTopicNo.13)  Re[10]: .netでkillfocusイベントの取得
□投稿者/ takamoto (7回)-(2009/12/02(Wed) 17:04:24)
オショウさま
Hongliangさま

お世話になります。

制御タイミングを見直し、どうしても必要な場合はアドバイス事項を参考に
サブクラス化したいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -