- PR -

直前のコントロールの取得について

投稿者投稿内容
シュリ
会議室デビュー日: 2007/01/29
投稿数: 15
投稿日時: 2007-04-18 11:17
りんごさん、こんにちは。

ボタンが常にフォーカスを持つ必要がないのであれば、フォーカスがあたらないボタンを作ってみるとかは如何ですか?

SetStyle(ControlStyles.Selectable, False)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-18 11:27
引用:

りんごさんの書き込み (2007-04-18 10:54) より:

標準のTextBoxの場合には、TextBox1_PFKeyPressとなって欲しいのですが、、、


考え方を間違えておりませんか?

標準の TextBox には PFKeyPress などというイベントはないのはご存知ですよね?
既存のクラス (今回の場合 TextBox) に機能を拡張したいのであれば、標準では無理ですよ。

どうしても標準の TextBox を使いたいのであれば、デコレータ パターンのような修飾が必要になるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-18 11:38
レスありがとうございます。
Me.Button4.SetStyle(〜・・)という指定はできない?ですよね?

コード:
Me.SetStyle(ControlStyles.Selectable, False)



FuncKeyのNewで上記を行いました。
が・・ButtonのStyleを変更できないので、結果は同じでした。。

引用:
どうしても標準の TextBox を使いたいのであれば、デコレータ パターンのような修飾が必要になるでしょう。



すみません。ミスです。FuncKey_PFKeyPressでした。
デコレータ パターンのような修飾とはどういったものでしょうか?
教えていただけませんか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-18 11:46
引用:

りんごさんの書き込み (2007-04-18 11:38) より:

Me.Button4.SetStyle(〜・・)という指定はできない?ですよね?


SetStyle メソッドのアクセス修飾子は protected なのでそうなるでしょう。

引用:

FuncKeyのNewで上記を行いました。
が・・ButtonのStyleを変更できないので、結果は同じでした。。


(何だか、わかっていてわざと書いているように見えますが)
SetStyle メソッドは FuncKey ではなく Button に対して行う必要があります。

Button に対して行うには、Button の継承コントロールを作って内部で呼び出すか、
あるいはリフレクションを使って呼び出すことになるでしょう。

引用:

すみません。ミスです。FuncKey_PFKeyPressでした。
デコレータ パターンのような修飾とはどういったものでしょうか?
教えていただけませんか?


FuncKey_PFKeyPress イベントを発生させたいのであれば、デコレータ パターンの話は関係ありません。
FuncKey コントロール外の TextBox という前提でのお話ですから、聞き流して頂いて構いません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-04-18 11:51
解説どうもありがとうございます。

なんとなくですが、理解できました。というか、じゃんぬねっとさんの

引用:

仮想ファンクション キーから押下された場合はフォーカスは設定されない。
ただし、マウス ポインタでクリックした場合はフォーカスが移るので、これを元に戻したい。

という解釈で宜しいでしょうか?


でようやくわかった…というほうが正しかったりしますが orz

で。
流れ的に違う方向へ行っている感じがしますが、とりあえず検索して来た
方のためにちょっとフォローを。

引用:

ぽぴ王子さんの書き込み (2007-04-17 17:27) より:

フォーカスを持たない仕様なのであれば、ちょっと乱暴ですが
WM_SETFOCUS を MyBase に渡さずに捨てることでなんとかなりそう
な気がしますが、それではいけないのでしょうか。


この方式ですが、以前テキストボックスで実装したことがあったので、ボタ
ンでも行けるかな?と思っていたわけですが、ボタンではこういった方法は
取れませんでした。ついでに言うとテキストボックスでもフォーカス自体は
移動していて、キャレットが表示されないだけだった…というオチであったこ
とを付け加えておきます。
# 要するに表示専用テキストボックスが作りたかったのね

で、少し調べてみたことのまとめ。

シュリさんが書かれている方法で、Button を継承したコントロールがフォー
カスを持たないようにすることはできました。
これを 12 個持つカスタムコントロール(ユーザーコントロールではないで
すよね?)を作る…という感じでしょうか。

個人的な案としては、Panel を継承したカスタムコントロールを作成し、そ
こに自前で 12 個のボタンを描いてしまう方法です。フォーカスは移らない
し(だって Panel だもん)、ボタンはマウスでクリックされたら押された感じ
に描画しておけばいくらでも作り放題。あとはキー入力がなんとかなれば
…と、そこは今も同じですね。
VB5 の頃に、似たような感じでフォーカスを受け取りたくないので
WIN32API で無理矢理ボタンを描画させていたのを参考にしました。
これが参考になると思います。サンプルが意外と(失礼)よくできているな
と。
ButtnRenderer クラス (MSDN)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-18 12:15
ぽぴ王子様。ご返答ありがとうございます。

今、Button派生クラスを作成中です。
それで、教えていただいたPanelベースのカスタムコントロールも
同時に作成してみます。
これでやっとAPIから逃れられるかも(涙)

引用:
サンプルが意外と(失礼)よくできているなと。



(笑) 

皆様、ご丁寧なレス、大変ありがとうございました。

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