VisualBasic2005 Express Edition Betaを使用して
MDIフォームのWindowsアプリケーションをテスト作成しています。
親フォームにMenuStripコントロールを貼り付け、
それにMenuItemを一つ作り、
これをクリックすると子フォームを開くようにしました。
親フォームのソースには以下のものがあるくらいです。
Private Sub TestToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TestToolStripMenuItem.Click
FormChild.MdiParent = Me
FormChild.Show()
End Sub
子フォームにMenuStripコントロールを貼り付け、
それにMenuItemを一つ作り、
これをクリックすると子フォームを閉じるようにしました。
そのMenuItemのShortcutKeysプロパティにF1キーを設定しました。
子フォームのソースには以下のものがあるくらいです。
Private Sub F1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles F1ToolStripMenuItem.Click
Me.Close()
End Sub
実際に実行してみると、
親フォームから子フォームを開き
子フォームでF1キーを押すとちゃんと子フォームを閉じます。
しかし、再度親フォームから子フォームを開き
子フォームでF1キーを押すと何も反応せず子フォームは閉じられません。
この原因と対策をどなたかご存知でしょうか。
ちなみに親フォームのMenuItemのShortcutKeysプロパティには何も設定していません。
またF1キー以外にもAlt+F1などのキーに変えて試しましたが同じ結果でした。
宜しくお願いいたします。
>親フォームのソースには以下のものがあるくらいです。
> Private Sub TestToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TestToolStripMenuItem.Click
> FormChild.MdiParent = Me
> FormChild.Show()
> End Sub
VisualBasic2005 Express Edition Beta でもフォームの New は必要だと
思うんだけど、
http://msdn2.microsoft.com/library/5ezhe7zw.aspx
そのあたりのコードは?
あとは子フォームで KeyPress とか KeyDown のイベントは取れないんですか?
取れるなら結果は?
特攻隊長まるるう様、レスありがとうございます。
以下のように変えてみましたが結果は同じでした。
Private Sub TestToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TestToolStripMenuItem.Click
Dim frm As New FormChild
frm.MdiParent = Me
frm.Show()
End Sub
また、おっしゃるように子フォームのForm側のイベントで拾えば問題はないと思います。
一応それは最終手段で「せっかくShortcutKeysプロパティがあるのならそちらを使ってみよう」という考えです。
ところで、
試しに子フォームのイベントを以下のように変えてみて、
前回と同じように実行したところ
1度目は「メッセージを表示し、画面も閉じる」のですが
2度目以降は「メッセージは表示するが、画面は閉じない」というようになりました。
なぜMe.Close()だけできなくなるのでしょう?
Private Sub F1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles F1ToolStripMenuItem.Click
MessageBox.Show("子フォームを閉じます。")
Me.Close()
End Sub
引き続き宜しくお願いいたします。
>以下のように変えてみましたが結果は同じでした。
そんなレベルの話をしている訳ではありません。オブジェクトの
生成と開放について正しく学んでおられないのではないですか?
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200410/04100060.txt
>また、おっしゃるように子フォームのForm側のイベントで拾えば問題はないと思います。
>一応それは最終手段で「せっかくShortcutKeysプロパティがあるのならそちらを使ってみよう」という考えです。
そんな話もしてません。ショートカットを使うにも、キーが拾えて
なければ意味がありません。キーは拾えてショートカットのみ効かなく
なっているのか?原因を特定する為にちゃんとデバッグして下さい
と言っているのです。
学んでいるかどうかなど余計なお世話です。
キーが拾えているからMessageBox.Showが作用しているのではないですか?
Me.Close()だけ作用しないことが不可解だと申し上げています。
> 学んでいるかどうかなど余計なお世話です。
世話を焼かれたくないなら、自分で解決することですね。
要するに「初心者の内容」は「超初心者」には理解できないのです。
追記です。
ショートカットキーではなく子フォームのMenuItemをクリックした場合は
2度目以降であっても
メッセージの表示→画面を閉じる
という手順で正しく動作します。
ショートカットキーを使用し、かつ、
子フォームを閉じる場合にこのような現象が起きるようです。
引き続き宜しくお願いいたします。
原因を特定するに十分な情報が得られませんでした。
現段階でボクが想像する一番の原因は
・オブジェクトを正しく開放していないから
です。
>学んでいるかどうかなど余計なお世話です。
そこが原因かもしれないんですが、触れられたく
無い部分のようなのでボクが解決する手段が閉ざ
されました。ボクの力では解決は不可能ですので
このスレッドにボクが書き込むのは最後にします。
他にも優秀な方がたくさんおられますのでお任せ
したいと思います。
>Me.Close()だけ作用しないことが不可解だと申し上げています。
ボクの想像通りならフォームに関するほとんどの
事ができなくなってる可能性はあります。
自分で問題点を見つけられないようなら、βなんぞ利用すべきではない。
解決しました
○ 自分で問題点を見つけられないようなら、βなんぞ利用すべきではない。
◎ オブジェクトが何たるかをわかっていない人は、OOP を利用すべきではない。
ツイート | ![]() |