bugfix> vb.net > 投稿

WinFormで次のタイプのオブジェクトを使用しています。 CefSharp.WinForms.ChromiumWebBrowser

すべて正常に動作していますが、 SetZoomLevel でZoomLevelを変更しようとすると問題が発生します方法:

If oBrowser.IsBrowserInitialized Then
    oBrowser.SetZoomLevel(-2.0)
    Dim frame As CefSharp.IFrame = oBrowser.GetMainFrame
    Dim request As CefSharp.IRequest = frame.CreateRequest()
    request.Url = url
    request.Method = "POST"
    request.InitializePostData()
    Dim element = request.PostData.CreatePostDataElement()
    element.Bytes = postDataBytes
    request.PostData.AddElement(element)
    request.Headers = headers
    frame.LoadRequest(request)
End If

WinFormを初めて開くと、ズームレベルは変更されませんが、2回目の更新からは正常に動作します。

初期化および/またはメソッド呼び出しがありませんか?または、このメソッドを別の位置で呼び出す必要がありますか?

注:CEFSharp DLLバージョンは63.0.3.0です。 .NET Frameworkは4.5.2です


編集済み2018年6月1日:私は解決策を見つけました(以下を参照)が、今別の問題がありますブラウザが既に表示されているときにズームの変更が行われます、したがって、最終ユーザーがフォームの読み込み中にページサイズが変化するのを見るのは良くありません。

ズーム変更中にレイアウトをフリーズする提案はありますか? .SuspendLayout() および .ResumeLayout() 動作していません。

回答 1 件
  • 私は自分の質問に答える方法を見つけました。他のユーザーに役立つ可能性があるため、ここに投稿します。

    LoadingStateChanged を追加する必要があります   ChromiumWebBrowser のハンドラー  オブジェクト:

    AddHandler oBrowser.LoadingStateChanged, AddressOf WebBrowserOnLoadingStateChanged
    
    

    メソッドは次のようになります:

    Private Sub WebBrowserOnLoadingStateChanged(ByVal sender As Object, ByVal loadingStateChangedEventArgs As LoadingStateChangedEventArgs)
        Dim oBrowser As WinForms.ChromiumWebBrowser = CType(sender, WinForms.ChromiumWebBrowser)
        If Not oBrowser.IsLoading Then
            oBrowser.SetZoomLevel(-2.0)
        End If
    End Sub
    
    

    このソリューションは私の環境ではうまく機能しますが、今は別の問題があります:ブラウザーが既に表示されているときにズームの変更が行われるため、最終ユーザーがフォームのロード中にズームレベルが変化するのを見るのは好ましくありません。

あなたの答え