- - PR -
アクティブフォームの取得
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-01 20:35
vs2005 vb win xp
いつも拝見しております。 1つご教授願いたいことがあります。 今、子フォームを何画面も開けるような仕様になっています。その場合に、アクティブなフォームだけのつもりでF4キーを押下すると、すべて開いている子フォームのF4キーKeyPressイベントが発生してしまいます。 それなので、各子画面でアクティブかどうかの判定で、アクティブ以外はその処理をぬける 感じでつくりたいのですが、そういうことは可能でしょうか。 親から現在アクティブな子フォームを取得とかは、記載があったのですが、子自身がアクティブかどうかの判定っているのはできないのでしょうか?? わかる方がいましたら、ご教授お願いいたします。 | ||||||||
|
投稿日時: 2006-08-01 22:07
Form.ActiveForm プロパティ
| ||||||||
|
投稿日時: 2006-08-02 09:26
Jittaさん、ありがとうございます。
子フォームの、KeyPressイベントのところに、 Dim currentForm As Form = Form.ActiveForm をいれてみて、アクティブのフォーム名を取得してみようと思ったのですが、nothingになってしまいます。 nothingだったので、アクティブじゃないのかな思い 親フォームで、Dim tempChild As Form = Me.ActiveMdiChild を使うと、アクティブな子フォームは取得できました。 でも、子のKeyPressイベントに処理を入れたいので、子の方で取得したいのですが、何か根本的に違うのでしょうか? ご教授お願いいたします。 | ||||||||
|
投稿日時: 2006-08-02 09:47
リファレンスマニュアルぐらいは読みましょう。「アクティブなフォームがない場合は null 参照 (Visual Basic では Nothing) 」だそうです。 どの様にして値を確認していますか?もしかしてデバッガがアクティブになっているとか? | ||||||||
|
投稿日時: 2006-08-02 09:53
解決するにあたり '順番' が違うのではないでしょうか? 下記引用部分が、今回のような事態を招いたわけですよね? なぜ、こちらの原因を究明しようと思わなかったのでしょうか... 私は、1 人の技術者として下記の原因を知りたいと思っています。
このような事態は、普通の実装をしていれば起こらないでしょう。 どらさんは NCL の仕様だと思っているようですが、私は単なる実装ミスではないかと思っています。 MDI 子フォームには、フォーカス絡みの不具合は確かにありますが、 今回のようなケースはちょっと想定できないですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-08-02 10:06
甕星さん、じゃんぬねっとさん、ありがとうございます。
こっちの、文章不足ですいません。NOTHINGだとアクティブフォームがないのはヘルプで調べてました。それだったので、親フォームで子フォームのアクティブを調べて、アクティブフォームがあることを確認したのです。 (Dim tempChild As Form = Me.ActiveMdiChild) 値の確認は、Dim currentForm As Form = Form.ActiveFormで、currentFormの値を確認してます。
確かにそうですよね。根本的にすべてのキーイベント自体、発生してしまうのがおかしいですよね^^; もう一度、その辺を含めて調べてみます。 原因がわかりましたら、報告します。 | ||||||||
|
投稿日時: 2006-08-02 17:01
結果報告します。
結果は、Inputman for .NET4.0のファンクションコントロールを使っていたためでした。 確認したところ、すべての画面でイベント発生してしまうのは仕様どおりということでした。 解決策としては Enterイベントのときに、 fnkファンクションキー.Enabled = Trueとし Leaveイベントのときに、fnkファンクションキー.Enabled = falseとする感じでした。 仕様ツールを最初に記載してなかったのが、皆さんを混乱させてしまった原因ですよね。以後気をつけます。 ちなみに、子フォームがアクティブかどうかをみるのは、 If Not Me.MdiParent.ActiveMdiChild Is Me Then '*処理 End If でした。 またよろしくお願いいたします。 |
1