アプリ版:「スタンプのみでお礼する」機能のリリースについて

こちらのサイトを参考に、WebBrowser1内のクリックを検出しています。
http://homepage1.nifty.com/yasunari/VB/VBTips001 …

Public Class Form1
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim Obj As Object = New ExtObj
   WebBrowser1.ObjectForScripting = Obj
~ナビゲート処理~
End Sub
End Class

<Runtime.InteropServices.ComVisible(True)> _
Public Class ExtObj
 Public Sub MsgBoxShow(ByVal Msg As String)
  ~呼び出し処理~
 End Sub
End Class

思い通りにブラウザ上のクリックを取得できています。
次のステップとして、「form1を閉じる」をしようとしてます。
ブラウザ上でのクリックで目的達成なので、form1を閉じようとしています。
しかし、うまくいきません。


以下のようなことを試しました。
ExtObj 内で、Me.Close() → 「closeはメンバではありません」
ExtObj 内で、Form1.close() → 無反応。エラー無し

Form1内に次のような関数を作って、
Public Sub closeForm()
Me.Close()
End Sub

ExtObj 内から、Form1.closeFormを呼び出し → 無反応


呼び出されたオブジェクト側から、親(?)を制御する方法が必要なのかなと感じています。

良い方法がありましたらよろしくお願いします。

A 回答 (1件)

開発環境がVB2005以降なのであるなら



Application.OpenFormsから親フォームを取得できると思いますよ

dim oForm as Windows.Forms.Form
oForm = Application.OpenForms(0)
oForm.Close()
で出来そうです

ExtObj側のコンストラクタ(New)に Form型を引数にとるようにして
この引数を クラス変数に設定しておくという手もありますよ

<Runtime.InteropServices.ComVisible(True)> _
Public Class ExtObj
 private objForm as Windows.Forms.Form
 public Sub New( Optional oForm as Windows.Forms.Form = Nothing )
  objForm = oForm
 end Sub
 Public Sub MsgBoxShow(ByVal Msg As String)
  ~呼び出し処理~
  if objForm is nothing then
    objForm = Application.OpenForms(0)
  end if
  objForm.close()
 End Sub
End Class
といった具合で
呼び出し側を
Dim Obj As Object = New ExtObj(Me)
といった具合にしてみてはいかがでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!