• 締切済み

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

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。

  • 特定のフォームだけ別フォームからの参照がされません

    VB 2005,Framework2.0を使用しています。 現在、サブフォームからダイアログフォームを表示し、ダイアログフォーム内の入力値等をサブフォームに渡す処理を行っています。 サブフォームは複数作成しており、特定のサブフォームだけダイアログフォームの入力値がサブフォームに渡されず原因が分からなくて困っています。 コードは以下のような形で書いています。 'サブフォーム Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Dialog1 f.StartPosition = FormStartPosition.CenterParent f.ShowDialog() End Sub End Class 'ダイアログフォーム Public Class Dialog1 Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Form1.Label1.Text = Textbox1.text Me.Close() End Sub End Class 2005では、別フォームからの参照はVB6と同じようにインスタンスを作成しなくても参照できる様になったと聞いていますので、上記のコードでも参照方法として問題はないと思うのですが、うまく動作しない原因が分かる方が居られましたら宜しくお願いします。

  • VBでフォームを閉じる方法

    とても初歩的なことでお恥ずかしい限りですが・・・ どうしてもできないので教えてください。 OSがWindowsXP HomeEdition SP2で、 VisualBasic2005 ExpressEditon Ver8.0を使用しているのですが、フォームを消すことができません。 手順として 1、新規プロジェクトでWindowsアプリケーションを選択 2.フォーム1にボタン1を設置 3.ボタン1をダブルクリックし、コードを記載 自動的に記載されるコード Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ※1 End Sub End Class ここで、※1にunload meと記載。 すると、自動的にunload(Me)と変換されてしまい、 unloadの上にポインタを持っていくと、 「名前unloadは宣言されていません」 と出てしまいます。 一体何がいけないのでしょうか・・・?

  • Form間のデータ渡しについて

    申し訳ありません。VB.NET初心者です。 Form1から、ボタンAをクリックするとForm2がオープンします。 Form1から、ボタンBをクリックするとForm3がオープンします。 Form1では、Form2またはForm3で設定した値をそれぞれ演算に使おうとしています。 MicrosoftのHPからパクってForm1 - Form2間のデータの引渡しを行うことはできたの ですが、新規でForm3を作成して、Form1 - Form3間のデータの引渡しを行おうとする とForm3の立ち上がり時に "NullReferenceException はハンドルされませんでした"となり、 困ってしまいました。 使われている方から見ると簡単かもしれず 申し訳ありませんが、どなたか教えていただけないでしょうか。 ==================== Form1.vb ======================= Form1には、Label1、Label2、Button1、Button2があります。 Public Class Form1 Inherits System.Windows.Forms.Form Private m_form2 As Form2 Private m_form3 As Form3 Public Property LabelText() As String Get Return Label1.Text End Get Set(ByVal Value As String) Label1.Text = Value End Set End Property Public Property LabelText2() As String Get Return Label2.Text End Get Set(ByVal Value As String) Label2.Text = Value End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleYokusou.Click m_form2 = New Form2(Me) m_form2.ShowDialog() m_form2.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleHikito.Click m_form3 = New Form3() m_form3.ShowDialog() m_form3.Dispose() End Sub End Class ==================== Form2.vb ======================= Form2には、TextBox1、Button1があります。 Public Class Form2 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText = Me.TextBox1.Text End If End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If m_form1 Is Nothing = False Then Me.TextBox1.Text = m_form1.LabelText End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class ==================== Form3.vb ======================= Form3には、TextBox1、Button1があります。 Public Class Form3 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText2 = Me.TextBox1.Text End If End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TextBox1.Text = m_form1.LabelText2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class

  • VB2010でMDI親フォームから子フォームを表示

    VB2010でソフトを作っております。 MDI親フォームから子フォームを表示させたいのですが…。 過去に少しだけVB6を使っていたことがありますが、クラスという概念に苦労しております インスタンスや初期化といったところをうまく扱えばとは思うのですが、よろしくご指導お願いいたします。 1.MDI親フォーム(Form1)のボタンを押し、子フォーム(Form2)を表示させる 2.子フォームが表示されていなかったら表示させる 3.子フォームが表示されていたら何もしない これだけの事ですがずいぶん悩んでおります。 全コードがこれです。 Public Class Form1 Private f2 As New Form2 Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fChild As Form() = Me.MdiChildren For Each f As Form In fChild If f.Text = "Form2" Then Exit Sub End If Next f2 = New Form2 f2.MdiParent = Me f2.Show() f2.Activate() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If f2 Is Nothing OrElse f2.IsDisposed Then f2 = New Form2 f2.MdiParent = Me End If f2.Show() f2.Activate() End Sub End Class ボタン1でもボタン2でも、期待する動作はするのですが、 ボタン1ではアクティブになっているフォームの名前を力技で取得している気がして… ボタン2では子フォーム(Form2)をすでに表示している状態でもさらにShowをしているのが気に入らなくて… もっとスマートな方法がありましたら、ご指導お願いします。

  • Button1をクリックしてエクセルファイルを開きたい

    VB2008のを使用しています。 Button1をクリックして「C:\test.xls」を開きたい場合 どのようなコードを書けばいいのでしょうか? ヘルプを見て Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Public Event Open As WorkbookEvents_OpenEventHandler ThisWorkbook_Open() Handles Me.Open Me.Application.WindowState = Excel.XlWindowState.xlMaximized End Sub End Class としてみましたがエラーになりました。 ご教授よろしくお願いします。

  • form2がボタンを押すと消えてしまう

    vb2010で、作成しています。form1から、form2を呼び出し、okボタンまたは、cancelボタンを押すと、無条件でform2が消えてしまいます。私がしたいのは、form2(パスワード入力ウィンドウ)でテキストボックスにパスワードを入力してokボタンを押して、それが正しい(1234)ときのみform2を消去することです。現在のところ、入力したパスワードが間違っていてもokボタンを押すと、form2は消えてしまいます。 form1側のコードとform2側のコードは以下です。お手数ですが御教示いただけると幸いです。 /////////Form1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TextBox1.PasswordChar = "*"c '//入力文字をマスクする If f.ShowDialog(Me) = DialogResult.OK Then If f.TextBox1.Text = "1234" Then f.Dispose() End If End If End Sub End Class /////////Form2 Public Class Form2 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.OK End Sub Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.Cancel End Sub End Class

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1

    VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1つめのフォームの操作ができないのですが、どなたか解決方法を御存じないでしょうか。 よろしくお願いします。 Form1のピクチャーボックスに描いた折れ線グラフ上のカーソル(Form11)が、 マウスの動きに合わせてグラフ線上をたどっていくようにしようとしています。 【Form1のボタンを押すと2つめのフォームを呼び出す】 Dim Mark As New Form11 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'グラフカーソル表示 Mark.Show() 【呼び出されたフォームのコード】 Imports System.Drawing Public Class Form11 Private Sub Form2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 'フォームのクライアント領域のサイズを設定 Me.ClientSize = New System.Drawing.Size(20, 20) 'カーソルを描く Dim MarkPen As New Pen(Color.Red, 1) Dim g As Graphics = e.Graphics g.DrawEllipse(MarkPen, 0, 0, 20, 20) '円の描画 Me.TopMost = True '最全面 Me.TransparencyKey = Me.BackColor '透明色の設定 Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None '枠なし End Sub End Class

  • ボタンをクリックしても空白をリストに追加しないようにしたい

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみにLabel3にはリストに登録された数が出ます) Public Class Form1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Clear() Label3.Text = ListBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label3.Text = ListBox1.Items.Count End Sub End Class

このQ&Aのポイント
  • 不動産の賃貸の斡旋をする不動産屋に対する仲介料について疑問があります。賃貸契約が成立した場合、仲介手数料がひと月の賃料3か月分の支払いとされていますが、法律では1か月分を超えないことが明記されています。
  • 不動産会社による賃貸契約の仲介手数料は、ひと月の賃料3か月分とされていますが、インターネットなどでの情報では法律的には1か月を超えることは禁止されています。
  • 契約書のドラフトには1か月分の仲介料と記載されていますが、別途の用紙には3か月分の説明があります。不動産屋は借主との話し合いで3か月分を超えることも可能と言っていますが、貸主が承諾すれば上限は撤廃できるのでしょうか。また、他の不動産屋に当たるべきかどうかも迷っています。
回答を見る

専門家に質問してみよう