- - PR -
ひとつ前のアクティブコントロール名
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-02-06 11:00
いつもおせわになっております。
VB.Netでの質問です。よろしくお願い致します。 行いたい内容は下記の通りです。 ************************************************ Form上にTextBox(複数)とHelpボタンがあります。 AというTextBoxにフォーカスがあり、その時点で Helpボタンをクリックもしくは、F1KeyDownでAに関する ヘルプを表示し、BというTextBoxにフォーカスがあり、その時点で Helpボタンをクリックもしくは、F1KeyDownでBに関する ヘルプを表示したいのですが、どうしてもうまくいきません。 ************************************************ Helpボタンをクリック・F1Keydown時にAやBのText名 を取得しようとしても、どうやって取得したらよいか わかりません。 1つ前のアクティブコントロール名を取得とか出来る 方法をご存知の方いらっしゃったらご教授お願い致します。 | ||||
|
投稿日時: 2003-02-06 11:51
FormクラスにはKeyPreviewというプロパティがあります。
これをtrueにすると、コントロールがキーイベントを発生させる前にフォーカスでキーイベントが発生するようです。 これによってフォームでキー入力を受け、F1であればControlsプロパティのそれぞれのFocusedを調べるというのはどうです? 試していないのでできるか分かりませんが。 1つ前のアクティブコントロール名を取得するというのは残念ながら分かりません。 | ||||
|
投稿日時: 2003-02-07 09:17
一郎さんありがとうございます。
KeyPreviewを使ってどうやればいいのかと 色々と調べてみました。 使用方法が分からなくてどうすればいいのか 困っています。もし、よろしければ、簡単な 例を教えて頂けないでしょうか? | ||||
|
投稿日時: 2003-02-07 10:25
例えばForm1に色々なコントロールが貼り付けてあるとします。
Form1.KeyPreviewをTrueにし、Form1.KeyDownイベントを受けて、
としてみてください。 余談ですが、VisualStudio開発環境を使ってVB.NETのソースを書いているときに、ctrlにFocusedプロパティがあるにも関わらず無いように見えました。(Ctrl+Spaceキーでの一覧に出てこなかった) もしかするとつまづいたのはここですか? C#のソースをいじっているときにはそんなことはないんですが、VB.NETの場合、いろいろ余計なことをしてくれますので、気をつけましょう。 [ メッセージ編集済み 編集者: 一郎 編集日時 2003-02-07 10:30 ] | ||||
|
投稿日時: 2003-02-07 11:25
一郎さん本当にありがとうございます。
すごく参考になりました。 結果、下記のようにプログラムをかきました。 Private CtrlNm As String Public Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown If e.KeyCode = Keys.F1 Then CtrlNm = Me.ActiveControl.Name End If End Sub Private Sub btnFunc_01_MouseMove (ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)Handles btnFunc_01.MouseMove CtrlNm = Me.ActiveControl.Name End Sub ctrlにFocusedプロパティでつまづいたのではなくて、 KeyPreviewをTrueにして その後、どうしたらよいのかが理解できていませんでした。(どうしようもない悩み でした) マウスクリック時にはMouseMoveで、F1等押下時にはFormのKeyDownイベントで対応しました ありがとうございました。 VB.Netは6.0とだいぶ違うみたいなので、色々と悩んでいます。 | ||||
|
投稿日時: 2003-02-07 11:36
MouseMoveではなくてLeaveの方がよいのではないでしょうか。
| ||||
|
投稿日時: 2003-02-13 16:57
Move時よりLeave時にする方がよいのですか?
調査します。ありがとうございます。 別の話になるのですが、Inputman.netを使用しているのですが、たまに Focusがあるのに、目で確認できなくなる事がよくあります。 原因がさっぱりわかりません。。。。 原因は何なのでしょうか。何か入力を行うときちんと、文字が表示されるのですが 文字を入力するまでは、Focusがどこにあるのか、目で確認できない。。。 何かご存知ないでしょうか? | ||||
|
投稿日時: 2003-02-13 18:25
こんばんわ、みかんです。
#試さずに言っているので適当に聞き流してもらっても。 「アクティブなTextBox」をGotFocusイベントあたりで覚えておくというのはどうでしょう。 初期状態及び、対象となるTextBox・ヘルプボタン以外がフォーカスを得たときは「なにもなし」を覚えるってことにして。 ボタンがMouseMoveやLeaveで反応するよりはいいような気がしません? | ||||
