WebView2コントロールが見えない

タグの編集
投稿者 hasumoto  (その他) 投稿日時 2023/7/21 16:08:47
VB2022

フォーム1に、WebView2コントロールを貼り付けて、再生ボタンを押しました。
しかし、フォーム1上に、WebView2コントロールが見えません。
Visibleは、trueになっています。
コントロールは見えませんが、クリックして試してみました。

Private Sub WebView21_Click(sender As Object, e As EventArgs) Handles WebView21.Click
MsgBox("あ")
End Sub
上の様に書くと、クリックした時、メッセージボックスは出ます。

Private Sub WebView21_Click(sender As Object, e As EventArgs) Handles WebView21.Click
WebView21.CoreWebView2.Navigate("https://www.google.com/?hl=ja")
End Sub
上の様に書くと、クリックした時、下記の様に、エラーが出ます。
Obujyect reference not set to an instance of an object

どうしたら良いでしょうか?
よろしくお願いします。

今回このコントロールと、VB2022使うの初めてです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/7/21 16:58:44
ただ貼りつけただけでは動きません。
使用前に初期化メソッド(EnsureCoreWebView2Async) を呼んでおく必要があります。

' 案1 
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '初期化処理メソッドを呼び出す(非同期実行) 
        WebView21.EnsureCoreWebView2Async()
    End Sub
    Private Sub WebView21_CoreWebView2InitializationCompleted(sender As Object, e As Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs) Handles WebView21.CoreWebView2InitializationCompleted
        'CoreWebView2InitializationCompleted イベントで初期化完了が通知されてきたら使用可能 
        WebView21.CoreWebView2.Navigate("https://www.google.com/?hl=ja")
    End Sub
End Class



' 案2 
Public Class Form1
    Private Async Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '初期化処理メソッドを呼び出す(Await にして、完了まで待ち合わせ) 
        Await WebView21.EnsureCoreWebView2Async()
        '初期化が完了したら使用可能 
        WebView21.CoreWebView2.Navigate("https://www.google.com/?hl=ja")
    End Sub
End Class
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/7/21 17:08:01
もう少し補足すると:

> 'CoreWebView2InitializationCompleted イベントで初期化完了が通知されてきたら使用可能
> WebView21.CoreWebView2.Navigate("https://www.google.com/?hl=ja") 

初期化の成否も考慮する場合は、CoreWebView2InitializationCompleted イベントで
イベント引数から e.IsSuccess を確認するようにします。
初期化に失敗した場合は、失敗の理由を e.InitializationException から得られます。

If e.IsSuccess Then
    WebView21.CoreWebView2.Navigate("https://www.google.com/?hl=ja")
ElseIf e.InitializationException IsNot Nothing Then
    '初期化エラー 
    MessageBox.Show(e.InitializationException.ToString())
End If
投稿者 hasumoto  (その他) 投稿日時 2023/7/22 09:03:25
ご回答ありがとうございます。
出来そうな感じがします。
直ぐに作業できないので、解決した時は、報告します。
よろしくお願いします。
投稿者 hasumoto  (その他) 投稿日時 2023/7/22 13:46:51
ありがとうございます。
出来ました。