こんちわ〜。
無理と知りつつ、もしかしたら、何か裏技があるのであれば知りたいと思い、投稿させてもらいました。
コントロール配列のイベントを共有する裏技ってあるんですか?
ぜーーーたいに、無理なんであれば、あきらめるしかないと思い、UIの部分を作り変えようと思っています。
ただ、かなりの作業量があるので、もし裏技があるのであれば、
ぜひぜひ、知りたいです。
どなたか知っている人いないですか?
開発環境は、XPでVB6です。
よろしくお願いします。
具体的に何のイベントをどこでどうしたいのか書くとレスもらえるかもしれず
編集 削除コントロール配列の場合、イベント制御については、
Private Sub aaaa_Click(Index As Integer)
のような、標準のイベントを利用する方法のみであり、WithEvents にて
Private WithEvents aaaa As コントロール配列
みたいな事をするというのは、残念ながら無理でしょうね。
どうしても実装するというなら、UserContol上にコントロール配列を
構築して、それらのイベントを公開する形態を取るという手法も
ありますが、UIの変更が必要になってしまうので、かえって面倒でしょうし。
まず、回答ありがとうございました。
うーん。やはり。。。
では、質問を変えさせてください。
ショートカットキーを実現するときに、フォーカスがAというオブジェクトにいる場合と、Bというオブジェクトにいる場合で、処理を統一したかったのですが、AもBもコントロール配列として作成されています。
そのため、WithEventsを使用することはできませんでした。
皆さんは、このような場合は、やはり気合で、A_Keydownにも、B_Keydownにも同じショートカットキーを実現する関数をコールするような処理をしているということでしょうか?
同じ内容を2箇所に記述するのを避けたかったのです。
ちょっと違うかもしれないですが、参考までに
A(2)というボタンを押した時にB(4)というボタンを押したのと同じ処理をしたい、という時
やり方その1:
Private A_Click(Index As Integer)
If Index = 2 Then
B_Click(4)
End If
やり方その2:
Private A_Click(Index As Integer)
If Index = 2 Then
処理ルーチンへ飛ばす
End If
End Sub
Private B_Click(Index As Integer)
If Index = 4 Then
処理ルーチンへ飛ばす
End If
End Sub
Private 処理ルーチン
処理させる
End Sub
> ショートカットキーを実現するときに、フォーカスがAというオブジェクトにいる場合と、Bというオブジェクトにいる場合で、処理を統一したかったのですが、AもBもコントロール配列として作成されています。
「ショートカットキー」の定義にもよるだろうけど、キー入力は、KeyPreviewなフォーム側のKey系イベントで一括して処理するようにしておいて、フォーカス位置を ActiveControl 経由で取得するようにすれば良いのでは?
ちなみに、
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200511/05110028.txt
この人だよね?
>皆さんは、このような場合は、やはり気合で、A_Keydownにも、B_Keydownにも同じショートカットキーを実現する関数をコールするような処理をしているということでしょうか?
Formのキーダウンに記述し、
現在何処のコントロールにフォーカスが当たっているのかを見たほうが速そう。
KeyPre(略 プロパティをTrueにして
こんにちわ。
ささ さん、通ってみたさん、Dental さん。
ご助言ありがとうございます。
初めて知ったのですが、Formの「KeyPreview」プロパティを有効にしておけば、
フォーカスを持っているオブジェクトがKeyPressイベントを取得する前に、
FormがKeyPressのイベントを受け取ることが出来るのですね!!
そっか。。。
知らなかった。。。
一生懸命、イベントを共有して、やりくりする方法を試行錯誤してました。
オレ、オバカです。
ありがとうございました。
これで、コード量を1/3くらい減らすことが出来そうです。
このプロパティを有効にして記述するということは
他のキーが入力されたときもつねに先にイベントが発生するので、処理をさせるときの条件式が甘いと、予期しないときにどうさしてしまいますので、
乱用はおすすめしないです
がその事を認識しながら利用する分には良いのではないかと思います