2017-01-06 7 views
2

本質的に、メインフォームのパネルに読み込んでいるプロジェクトにdotNetBrowserを使用しています。ユーザーコントロールのボタンを持っていますブラウザ。ここで私が持っているものだ:C#UserControlからdotnetBrowserにアクセスする

私は私のusercontrol.csで、正常に動作します
public partial class Form1 : Form 
{ 

    public BrowserView browserView = new WinFormsBrowserView(); 

    public Form1() 
    { 
     InitializeComponent(); 

     this.panel1.Controls.Add((Control)browserView); 
     browserView.Browser.LoadURL("URL TO BE LOADED"); 

     browserView.Browser.FinishLoadingFrameEvent += delegate (object sender, FinishLoadingEventArgs e) 
     { 
      if (e.IsMainFrame) 
       { 
       // Do stuff when loaded 
       } else return; 
      } 
     }; 

    } 
} 

public void button1_Click(object sender, EventArgs e) 
    { 
     BrowserView br = (this.Parent as Form1).Controls["browserView"] as BrowserView; 
     br.Browser.LoadURL("NEW URL"); 
    } 

ボタンがクリックされたとき、それは新しいURLをロードできるように。しかし、これはnull例外をスローしています。

基本的には、お互いに情報を渡すためには、この2つのコンポーネントが必要です。私が使用したメソッドは、他のForm1コントロールでうまく機能しましたが、ブラウザでは見えません。

アドバイスはありますか?

+0

「例外をスローする」は、非常に有用な情報ではありません。 stacktraceはどこにエラーが発生したと言いますか? –

+0

'(this.Parent as Form1)'です。 BrowserViewコントロールは、フォームの直接コントロールコレクションではなく、Panelのコントロールコレクション内にあります。 – LarsTech

+0

"br.Browser.LoadURL(" New URL ");" – AlphaOmega

答えて

3

browserViewは公開変数の名前なので、(this.Parent as Form1).browserViewを使用すると簡単にアクセスできます。

+0

ありがとう!完璧に働いた – AlphaOmega

1

browserViewForm1.panel1が追加されましたが、(this.Parent as Form1)から取得しようとしています。

明示的に参照する場合は、BrowserViewを検索する必要はありません。このリファレンスをユーザーコントロールに与えることをお勧めします。ホスティングフォームの内部を知っているユーザーコントロールは、情報が間違った方向に流れていることを意味します。

コントロールの名前はIDEによって与えられ、コードでコントロールが作成されると空になります。

関連する問題