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

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

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

Re[6]: テンキーフォームを呼び出したい


(過去ログ 120 を表示中)

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

■70210 / inTopicNo.1)  テンキーフォームを呼び出したい
  
□投稿者/ C#研究者 (52回)-(2014/03/01(Sat) 08:45:57)

分類:[C#] 

実行環境 Windows7 32bit , Windows8 64bit
開発環境 Windows7 32bit VisualStudio C#2010

テンキーのフォームをexe形式で作成したので、テキストボックス入力時などに呼び出したいと思います。

ソフトウェアキーボードの呼出しは各コントロールのイベントを追加して追加するのでしょうか。
それともなにかまた別の方法があるのでしょうか。

・たとえばメモ帳を立ち上げた時やエクセルを立ち上げたときに呼び出したいのですがそのようなことは可能なのでしょうか。
引用返信 編集キー/
■70218 / inTopicNo.2)  Re[1]: テンキーフォームを呼び出したい
□投稿者/ C#研究者 (55回)-(2014/03/03(Mon) 18:16:28)
GotKeyboardFocusというイベントを見つけましたが、
これはWPFのイベントでした。

デスクトップアプリケーションではどのようにすればイベントをつかまえられるのでしょうか。
引用返信 編集キー/
■70226 / inTopicNo.3)  Re[1]: テンキーフォームを呼び出したい
□投稿者/ Azulean (277回)-(2014/03/03(Mon) 22:25:06)
2014/03/03(Mon) 22:25:34 編集(投稿者)

No70210 (C#研究者 さん) に返信
> ソフトウェアキーボードの呼出しは各コントロールのイベントを追加して追加するのでしょうか。
> それともなにかまた別の方法があるのでしょうか。

単に自分のアプリケーションだけであれば、それぞれのコントロールにイベントを設定すればよいでしょう。
1つずつ設定するのが手間であれば、Controls から列挙し、イベントを割り付けるのも手です。


> ・たとえばメモ帳を立ち上げた時やエクセルを立ち上げたときに呼び出したいのですがそのようなことは可能なのでしょうか。

すぐにレスがつかなかった主要因は、この部分でしょう。
基本的に別のアプリケーションのウィンドウの動きを取得する方法は、.NET の標準クラスライブラリにはないとお考えください。
つまり、「イベントで何とかならない」のです。

考えられるとしたらグローバルフックですが、これを C# で作ることはできませんので、C# と限定した環境では手が打てません。
また、グローバルフックでウィンドウの検知という手法では WPF アプリケーションをカバーできない可能性があります。


No70218 (C#研究者 さん) に返信
> デスクトップアプリケーションではどのようにすればイベントをつかまえられるのでしょうか。

細かいですが、WPF アプリケーションもデスクトップアプリケーションに位置づけられますのでご留意ください。
引用返信 編集キー/
■70229 / inTopicNo.4)  Re[2]: テンキーフォームを呼び出したい
□投稿者/ C#研究者 (56回)-(2014/03/04(Tue) 00:11:58)
なるほど、わかりました。
地道にイベントを追加していきます。ありがとうございました。
解決済み
引用返信 編集キー/
■70255 / inTopicNo.5)  Re[3]: テンキーフォームを呼び出したい
□投稿者/ C#研究者 (59回)-(2014/03/04(Tue) 16:24:27)

地道にイベントを追加していこうかとおもったのですが、やはり数が多く手こずっています。

イベント挿入対象のプロジェクト(.exe,dll)ファイル、フォームファイルがかなりあるため、
フォームごとにControls から列挙し、イベントを割り付けて挿入するのは大変です・・・。

アプリケーション全体、もしくはプロセスに対してイベントを登録する方法はあるのでしょうか。
それでは失礼します。
引用返信 編集キー/
■70259 / inTopicNo.6)  Re[4]: テンキーフォームを呼び出したい
□投稿者/ Azulean (279回)-(2014/03/04(Tue) 22:46:41)
2014/03/04(Tue) 22:48:53 編集(投稿者)

近しいのはこれでしょうか。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.addmessagefilter

ただし、この層になってくると、イベントという考え方ではなく、Windows の低レベル層に存在しているメッセージループの考え方になってきますので、どのようなウィンドウメッセージが飛んでくるか、そのメッセージの引数が何かを理解する必要があります。


No70255 (C#研究者 さん) に返信
> アプリケーション全体、もしくはプロセスに対してイベントを登録する方法はあるのでしょうか。

基本的にコントロール、フォームのイベントはそれぞれのウィンドウに対応したオブジェクトがウィンドウメッセージに応じて提供するものです。
ウィンドウを問わずに処理するイベントというものは基本的にないと考えてください。
(そういう仕組みになると、イベントではなく、内部で隠蔽されているウィンドウメッセージレベルの対応となる)
引用返信 編集キー/
■70260 / inTopicNo.7)  Re[5]: テンキーフォームを呼び出したい
□投稿者/ tocs (14回)-(2014/03/04(Tue) 22:55:37)
tocs さんの Web サイト
> ■No70255 (C#研究者 さん) に返信
> フォームごとにControls から列挙し、イベントを割り付けて挿入するのは大変です・・・。

イベントの内容に依るとは思いますが、動的にメソッドを追加するとかT4で自動生成するとか。
http://msdn.microsoft.com/ja-jp/library/bb126445.aspx
引用返信 編集キー/
■70262 / inTopicNo.8)  Re[6]: テンキーフォームを呼び出したい
□投稿者/ C#研究者 (60回)-(2014/03/05(Wed) 10:58:55)

皆様回答ありがとうございます。
ちょっと私には難しそうなので

現在、タイマのように簡単に使えるようにコンポーネント化することを検討しております。
でも、今回はフォームのコントロールに対してイベントを追加するので
親フォームの参照が必要になってしまうのですけれども、
こういうのはコンポーネントにとって良くないのでしょうか。
よくなければ似たような方法を教えていただきたいと思います。



引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -