- PR -

SPREAD for .NETでSPREADから抜ける方法について

1
投稿者投稿内容
まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2004-11-26 23:18
お世話になっております。
VB.NETでWindowsアプリケーションの開発をしておるものです。
GrapeCity社のSPREAD for .NET Windows Forms Editionを使用しています。

このSPREADから抜け出たい(フォーカスを別のコントロールへ移したい)場合に、Advanceイベントを使用するのが一般的かと思うのですが、
[Tab]キーを押されたときだけSPREADから抜け出たいが為に、キーコードの判定が必要になります。
ところがこのAdvanceイベントのイベントアーギュメントにはそれっぽいものが含まれていないため、仕方なくKeyDownイベントでキーコードを取得してそのキーコードをAdvanceイベント内で参照しようと考えました。

しかし、GrapeCity社のFAQを見てみると、TABキーではKeyUpイベントしか発生しないとあります。
タイミング的にKeyUpイベントよりAdvanceイベントの方が先に実行されるようなので、KeyUpイベントで取得したのでは間に合わないのです。

良い方法がありましたら、ぜひご教授下さい。

【備考】
1.FAQにある、「常時入力モードではKeyイベントが発生しないことがある。」はクリア済みです。
2.キーコードではなく、アクティブセルの位置で判定すれば良いのでは?という意見もあるかも知れませんが、このSPREADはカスタムコントロール化して使用するため、一番最後のセルが非活性である場合も考えると、MaxRow、MaxColの場合にフォーカスを飛ばすとは一概には言えないのです。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-27 01:10
諸農です。

SPREADを使っていないのでどうかはわかりませんが、
KeyPreviewをtrueにセットしておけばFormで先にイベントを
受け取ることが出来るのではないでしょうか。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2004-11-27 03:13
ご回答ありがとうございます。

実はSPREAD以外のコントロールはご指摘の方法でフォーカス遷移させております。
しかし、SPREADにもこの方法を適用すると、SPREADの中でセル移動させることができなくなってしまうため、敢えてSPREADは対象外としています。

で、最終セルにいるときにTABが押された場合だけ、SPREADを抜けたいのです。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-27 12:39
諸農です。

引用:

で、最終セルにいるときにTABが押された場合だけ、SPREADを抜けたいのです。



SPREADそのものに対する操作の問題と言うことでしょうか?
しかも拡張して利用することが前提で利用方法にも特殊性が認められるとなると、拡張仕様に何か対応策を盛り込む等しないと、うまいやり方は出てこないような気がしますが。。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-29 09:05
引用:

実はSPREAD以外のコントロールはご指摘の方法でフォーカス遷移させております。
しかし、SPREADにもこの方法を適用すると、SPREADの中でセル移動させることができなくなってしまうため、敢えてSPREADは対象外としています。

で、最終セルにいるときにTABが押された場合だけ、SPREADを抜けたいのです。


この(Form.KeyPreview を用いた)とき、SPREAD の現在のセル位置によって分岐させてもうまくいかないんですか?
であれば、KeyPreview を用いること自体がうまくいかないんじゃないかという気がするんですが。
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-11-29 10:35
すみません。間違えて投稿しました。

Spreadの話だったんですね。

KeyPress以外でTabキーを取得したいのなら、マッピングでキー動作を変更(無効に)してはどうですか?

[ メッセージ編集済み 編集者: トージ。 編集日時 2004-11-29 13:43 ]
まるひろ
会議室デビュー日: 2004/05/25
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2004-12-16 11:00
にしざきさん、トージさん、返事が遅くなってすみません。

にしざきさんのおっしゃる通り、現在のセル位置で判定する方法があるのですが、Advanceイベントって最終セルで[Tab]を押しても[↓]を押しても発生しますよね。(InputMapがデフォルトの場合。)
一番最初の投稿にあるように、[Tab]を押されたときだけSpreadを抜けたいのです。

また、トージさんご提案の方法だと、[Enter]なんかのKeyCodeは取得できるようになるのですが、[Tab]は取得できなかった記憶があります。

なんか、やりたいことや前提条件を明確にしていないために混乱を招いているような記がします。すみません。

あとは自己解決、または仕様変更を検討してみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)