DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridのフォーカスをコントロールしたい

環境/言語:[WXPSP2 VS2003 C# .NET1.1]
分類:[.NET]

DataGridコントロールでTABキーによるセル移動の機能を無効にし
通常のコントロール(TextBox,Button)のように単にフォーカスが移動するだけにしたいのですが
うまくいきません

試している事

1.ProcessCmdKeyメソッドでTABキーをフックしtrueを返す
このままではTABに何も反応しなくなる

2. 1.に加えParent.SelectNextControlを呼んでフォーカス移動する
同一コンテナ内での制御は出来るが階層コンテナではコンテナ間のフォーカス移動が出来ない

3.ProcessTabKeyメソッドのオーバーライドし、1.でfalseを返す(処理済としない)
言語仕様によりnewされたProcessTabKeyが呼び出されない

4.ProcessCmdKeyからDefWndProcを呼んでみる
何も起こらない

です

よい方法がないでしょうか?
お世話になります。

■No14589に返信(SadManさんの記事)
こちらが参考になると思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=5675
■No14592に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> ■No14589に返信(SadManさんの記事)
> こちらが参考になると思います。
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=5675

ありがとうございます
この方法は、質問の1.と2.で成功しています
しかしコンテナの階層時にうまく動かないため単純にTAB機能を殺す方法はないかと模索しておりました

ProcessTabKeyというそれらしいメソッドがあるのにオーバーライドできないのは厄介だなぁと思いました

結果的に次の方法で解決しました

Parentを辿り、Formオブジェクトを探し
そのFormからSelectNextControlを呼ぶ

しかしこの方法ですべての場合に対応できるかは疑問です
(トップレベルのコンテナがFormクラスではない場合など)

今のところ最上位コンテナがFormしかない環境で使っているのでこれでうまくいきました
ありがとうございました
> Parentを辿り、Formオブジェクトを探し
> そのFormからSelectNextControlを呼ぶ

ちなみに、コントロール側からこのような決め付けを行うのは
あまりよろしくないと感じています

コントロールはタブキーを放棄するだけで
フォーカス自体はコンテナ側の制御に依存するのが正しい姿に思います

※ 解決マークに気が付かずチェックするのを忘れてました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板