■No40481 (まどか さん) に返信
> アクティブとはいわゆるタイトルバーが濃い青い状態でキー入力を受け付ける状態といっていいでしょう。
> 対してEnabledは操作を不可とする、つまりイベントが起きない状態といっていいでしょう。
> ポイントは前者で、フォーム1がクリックなどでアクティブになってもフォーム3をすぐにアクティブにする
> という方法の一つを書かれているのがやじゅさんです。
→「2.起動元のActivatedイベントで、サブ画面をアクティブにする」の意図が理解できました。
解説ありがとうございます。私、理解力がないですね…。
上記方法についてですが、何らかの(予期しない)操作で起動元のコントロールが触られることがないかが心配です。
大丈夫ですかね?。
問題がなければ、起動元のみの影響で修正できるので、影響範囲が少なく、魅力的です。
フォーム「test2」の仕様は、以下のようなものです。
@フォーム「test2」はいろいろな画面から呼ばれるフォーム。(chmヘルプのようなイメージです。)
A他の画面からフォーム「test2」を開く場合は、引数で呼び元の画面に対応したHTMLファイルのパスを受け取り、
フォーム「test2」画面に配置したWebBrowserコントロールにHTMLファイルを表示する。
(HTMLファイルには、呼び元の画面説明が記載されています。)
Bフォーム「test2」が既に開かれた状態で、別の画面から開こうとした場合は、
2つ以上フォーム「test2」は作成せず、呼び出し元の画面に対応したHTMLの切り替えのみを行う。
上記仕様のため、常にフォーム「test2」は操作ができるようにしたいのです。
いろいろな画面の中には、「test1」「test3」のような関係の画面があります。
→以下サンプルコードで示すとおり、フォーム「test2」を開く処理は、共通化がされているため、
フォーム「test2」を別アプリケーションで作成した場合は、影響を最小限に留められます。
(共通関数のみ直せばいいため)
ところが、Bの処理で現在詰まっております。
共通化は以下のイメージです。
---------------フォーム「test1」---------------
[test2の表示ボタンを押した場合の処理]
OpenForm2("test1.html")
[test3の表示ボタンを押した場合の処理]
Dim instTest3 As New test3
test3.ShowDialog
---------------フォーム「test3」---------------
[test2の表示ボタンを押した場合の処理]
OpenForm2("test3.html")
---------------共通関数---------------
[test2の表示処理(共通化)]
Public instTest2 As test2
Public Sub OpenForm2(ByVal PrmHtml As String)
If instTest2 Is Nothing Then
instTest2 = New test2
test2.SetHtml(PrmHtml)
test2.Show
Else
test2.SetHtml(PrmHtml)
End If
End Sub
---------------フォーム「test2」---------------
Private ShowHtml As String
[HTMLの表示/切り替え処理]
Public Sub SetHtml(ByVal PrmHtml As String)
'ここに受け取ったHTMLファイルをWebBrowserコントロールに
表示する処理を書いています。
End Sub
*出来る限り、複数のクラスに手をいれず、対応ができればと考えています。(開発規模の問題より)
(呼び出し元全てのクラスに手を入れるのは避けたいです。)
|