- - PR -
ボタン押下時のフォーカス遷移
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-11 18:40
お世話になります。
VB .NET 2003 でちょっと困ってしまいました。 通常は、無効(Enabled = False) なのですが、いくつかのテキスト項目に フォーカスがある場合にだけ有効になるボタンがあります。 ここで、単純にこれらのテキスト項目について Enter / Leave イベント ハンドラを実装し、そこでボタンの有効化/無効化を行なおうとしました。 ところが、該当テキスト項目にフォーカスがある状態でボタンをクリック すると、該当テキスト項目がフォーカスを失ってしまうため、 クリックイベントが発生する直前にボタンが無効になってしまうのです。 ボタンが押されても、元のコンポーネントにフォーカスが残ったままで、 且つ、ボタンの Click イベントを発生させることってできないのでしょうか。 よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2003-11-11 23:39
こんにちわ。諸農です。
なんとなく無茶な感じですね(^^; どのようなフォームデザインなのかはわかりませんが、 Leaveイベントでの処理をなしにすればうまく行くかもしれないですね。 Enterイベントで、フォームクラスのグローバル変数に現在フォーカスの あるオブジェクトを格納しておき、ボタンが押された後は(ボタンのク リックイベント内で)グローバル変数に格納されたオブジェクトにフォ ーカスをセットするようにしてみればいかがですか。 ただし、上記考え方だけでは考慮不足の部分もあるかと思いますので、 そのあたりの穴埋めを忘れないでくださいね。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||
|
投稿日時: 2003-11-12 01:48
ボアさん、こんばんは。
まず、確認なのですが、これはWindows フォーム アプリケーションのお話ですよね? それと、「テキスト項目」というのは、TextBox の事でよろしいでしょうか? そうであると仮定して話を進めますが、単純に、Control.GotFocus イベントで Button.Enabled プロパティの制御を行えば解決するような気がします。
[ メッセージ編集済み 編集者: きくちゃん 編集日時 2003-11-12 01:50 ] | ||||||||||||||||
|
投稿日時: 2003-11-12 08:45
Application.AddMessageFilterというものがありますが,どうでしょう。
| ||||||||||||||||
|
投稿日時: 2003-11-13 09:33
みなさんご回答ありがとうございます。
いろいろ対応策はありそうですが、結局ボタンが押されたときに、この ボタンにフォーカスが移ってしまうのは避けられないのでしょうか。。。
こうした時、その他のテキスト項目にフォーカスがある場合にどのように ボタンを無効にするかが問題なのですが、
言葉が足らずスミマセン。上記であってます。
この場合、無効になるテキスト項目全てを対象に含める必要があります よね。サンプルで提示いただいた方法で確かにできそうですが、なんか スマートじゃないなぁというのが率直な感想です。
ちょっとだけ調べてみましたが、ようはイベントが発生する前にマウスの クリックイベントだけ捕まえて、場合わけを行うようなイメージなので しょうか? 具体的に試してみないとなんともいえませんが、これを使うのは結構 一般的なのですか? VB .NET ってフォーカス遷移については結構神経質にならないと うまく使いこなせないような気がしてきました。 なかなか楽できないものですね。 | ||||||||||||||||
|
投稿日時: 2003-11-13 10:17
恐らく無理だと思います。 #もしできるとしても簡単にはいかないと思います。
パネルの上にテキストボックスとボタンを配置して、そのパネルの Enter/Leave イベントで ボタンの有効化/無効化を行うというのはどうでしょうか? | ||||||||||||||||
|
投稿日時: 2003-11-13 11:15
はじめまして。
引用: -------------------------------------------------------------------------------- いろいろ対応策はありそうですが、結局ボタンが押されたときに、この ボタンにフォーカスが移ってしまうのは避けられないのでしょうか。。。 -------------------------------------------------------------------------------- この方法はどうでしょうか? ・Buttonを継承したクラスを作成します。 ・そのクラスのNew( )の中で SetStyle(ControlStyles.Selectable, False) を書いてください。 そのボタンには決してフォーカスが移りません。 このボタンを使えばテキストボックスのEnter、Leaveで ボタンのEnableを設定しても問題ないと思います。 お試しください。 | ||||||||||||||||
|
投稿日時: 2003-11-13 13:03
こんにちわ。諸農です。
えっと、ちょっとイメージがつかみきれていないのですが フォームにTextBoxが3つあって、Buttonが1つあったとします。 3つのTextBoxのうち、1つにフォーカスがある場合にはボタンが 有効化され、且つ、その時だけボタンイベントハンドラが起動でき ればいいんですよね。 C#で申し訳ないですが、ボタンを有効化したいTextBoxのTagプロ パティに1をセットしておいて、ボタンの有効化制御をしてみました。 3つのTextBoxのEntryイベントに以下のイベントハンドラをセットしています。
でも、こんな感じではないということなのかしらん(^^ゞ ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ |