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

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

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

Re[4]: MDI子フォームで利用するDataGrid


(過去ログ 22 を表示中)

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

■9843 / inTopicNo.1)  MDI子フォームで利用するDataGrid
  
□投稿者/ まる (10回)-(2007/11/05(Mon) 22:37:32)

分類:[VB.NET/VB2005] 

2007/11/05(Mon) 23:01:40 編集(投稿者)
2007/11/05(Mon) 23:01:28 編集(投稿者)

初めまして。VB2005初心者です。

開発環境:WindowsXP Professional
使用言語:VisualStudio.NET 2005 professional

MDI子フォーム内でFlexGrid for .NETを使用しています。
通常のフォームOpenではプロパティの調整によって、
コントロールキー(Ctrl+C/Ctrl+Vなど)を使用したグリッドの操作が可能です。
しかし、そのフォームをMDIの子フォームとして開くと、コントロールキーが使用できません。
何か原因があるのでしょうか?


是非是非、ご教授ください。。

引用返信 編集キー/
■9870 / inTopicNo.2)  Re[1]: MDI子フォームで利用するDataGrid
□投稿者/ カンタービレ (11回)-(2007/11/06(Tue) 13:13:25)
No9843 (まる さん) に返信
> 通常のフォームOpenではプロパティの調整によって、
> コントロールキー(Ctrl+C/Ctrl+Vなど)を使用したグリッドの操作が可能です。
> しかし、そのフォームをMDIの子フォームとして開くと、コントロールキーが使用できません。
> 何か原因があるのでしょうか?
>
MDIの子フォームと通常のフォームではショートカットの割付自体が変わっていたかと思いマス。
ALT+F4では普通フォームを閉じますが、MDIの子フォームだったらCTL+F4みたいな。

推測ですけど、ショートカットが親フォームから子フォームに行かなくなってるのでは?
ショートカットキーのイベントを拾ってみるようにして、確認されてみてはいかがでしょうか。
原因が親から子に引き継がれないとかであったら、子に投げなおすようにしてあげれば
うまくいくかも知れませんね。
引用返信 編集キー/
■9871 / inTopicNo.3)  Re[2]: MDI子フォームで利用するDataGrid
□投稿者/ まる (11回)-(2007/11/06(Tue) 13:58:24)
> MDIの子フォームと通常のフォームではショートカットの割付自体が変わっていたかと思いマス。
> ALT+F4では普通フォームを閉じますが、MDIの子フォームだったらCTL+F4みたいな。
>
> 推測ですけど、ショートカットが親フォームから子フォームに行かなくなってるのでは?
> ショートカットキーのイベントを拾ってみるようにして、確認されてみてはいかがでしょうか。
> 原因が親から子に引き継がれないとかであったら、子に投げなおすようにしてあげれば
> うまくいくかも知れませんね。

回答ありがとうございます。概ねそのとおりの事象でした。

例えばMenuStrip内の、ToolStripMenuItemにShortcutKeysにてCTRL+C等を設定していた為に
子フォーム(親フォームにも)にイベントが行かなかった事が分かりました。
ShortcutKeysの設定を外して、イベントハンドラにてキーイベントを取得したところ、
ctrl+Cを実行した際、ControlKeyと、Cが押されたイベントが取得でき、
動作も思った動作が実現できました。

ただ1点気になるのですが、ShortcutKeysにctrl+Cを設定し、
親フォームにてキーイベントの取得をした場合、ControlKeyのクリックは取得できるのですが、Cをクリックしたイベントが取得できませんでした。
ShortcutKeysを設定することにより、最初にMenuStripでキーを受け、親フォームに届かない事象な気がしますが、原因が分かりません。。。


引用返信 編集キー/
■9879 / inTopicNo.4)  Re[3]: MDI子フォームで利用するDataGrid
□投稿者/ カンタービレ (12回)-(2007/11/06(Tue) 15:19:00)
No9871 (まる さん) に返信
> 例えばMenuStrip内の、ToolStripMenuItemにShortcutKeysにてCTRL+C等を設定していた為に
> 子フォーム(親フォームにも)にイベントが行かなかった事が分かりました。
> ShortcutKeysの設定を外して、イベントハンドラにてキーイベントを取得したところ、
> ctrl+Cを実行した際、ControlKeyと、Cが押されたイベントが取得でき、
> 動作も思った動作が実現できました。
>
実現できてよかったデス。

> ただ1点気になるのですが、ShortcutKeysにctrl+Cを設定し、
> 親フォームにてキーイベントの取得をした場合、ControlKeyのクリックは取得できるのですが、Cをクリックしたイベントが取得できませんでした。
> ShortcutKeysを設定することにより、最初にMenuStripでキーを受け、親フォームに届かない事象な気がしますが、原因が分かりません。。。
>
>
単純なKeyPressイベントなどでハンドリングしてますか?その場合は別々になったりするような・・。
でもCキー単独も拾えない・・?
私もそんなに詳しくないので細かい説明はVBのえらい人におまかせするとして(汗)
コントロールですべてのイベントを捕捉出来るわけではないと思いますが
捕捉して確認したいものが違っているような感じもうけます。
私がキーイベント拾ってみたらと書いておいてなんですケド^^;
拾う前にCtrl+Cとしてキーイベントが処理されて捨てられているかも知れません。

WndProcをオーバーライドして確認、なんてことも確認だけであればいいかも知れませんが
おっしゃる通りShortcutKeysの設定によって既に処理されて破棄されたというイメージが強いデス。

なので、設定を有効にしつつグリッドのときはそちらにも飛ばしたい、という場合は
MenuStripでうけた時に実行するメソッド内からもう一度同じ内容のイベントをグリッドに対し
メッセージ送信してあげればよいかな、と思ったわけデス。
なんか説明が拙くってスミマセン・・。
引用返信 編集キー/
■9885 / inTopicNo.5)  Re[4]: MDI子フォームで利用するDataGrid
□投稿者/ まる (12回)-(2007/11/06(Tue) 16:30:24)
> でもCキー単独も拾えない・・?
> 単純なKeyPressイベントなどでハンドリングしてますか?その場合は別々になったりするような・・。
もちろん、デバッグとしてのハンドリングなので、単純なKeyDownイベントでのハンドリング
を行いました。キー単位で別々です。
単純なCキーなどは、拾えてます。
ShortcutKeysに設定されてしまっている対象のキー(が拾えない、
という感じでした。

> WndProcをオーバーライドして確認、なんてことも確認だけであればいいかも知れませんが
> おっしゃる通りShortcutKeysの設定によって既に処理されて破棄されたというイメージが強いデス。
色々試した結果、破棄されているようでした。。

最終的に以下の方法で対応することで、Excelライクなグリッドの操作が
実現できそうです。

1.ShortcutKeysの設定はnoneにする
 (この時点で、子フォームに対する操作はほぼ満たされましたが..)
2.MenuItemのクリックイベント時に、アクティブなMDI子フォームを取得
3.アクティブなMDI子フォームに対してSendKeys.Send("^C")などにて、キーイベントを送信する

色々ご説明、ありがとうございました。助かりました。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -