• 締切済み

Webbrowser1クリック検出後、フォームを閉じる方法

こちらのサイトを参考に、WebBrowser1内のクリックを検出しています。 http://homepage1.nifty.com/yasunari/VB/VBTips001.html 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を呼び出し → 無反応 呼び出されたオブジェクト側から、親(?)を制御する方法が必要なのかなと感じています。 良い方法がありましたらよろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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) といった具合にしてみてはいかがでしょう

関連するQ&A