2017-06-09 53 views
0

不知道我試圖實現的是否可能,但我試圖在CefSharp winforms中創建自定義下載的欄。CEFSharp Winforms調用處理程序的窗體上的控件

我已經在我的主窗體上創建了一個控件,我想在文件下載完成後可見,我遇到的問題是我無法從DownloadHandler中引用窗體。

如果我創建窗體的新實例,它將打開一個新的空白窗體,我不想要。

這是我的代碼。

class DownloadHandler: IDownloadHandler 
{ 
    public event EventHandler<DownloadItem> OnBeforeDownloadFired; 

    public event EventHandler<DownloadItem> OnDownloadUpdatedFired; 

    public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) 
    { 
     var handler = OnBeforeDownloadFired; 
     if (handler != null) 
     { 
      handler(this, downloadItem); 
     } 

     if (!callback.IsDisposed) 
     { 
      using (callback) 
      { 
       callback.Continue(downloadItem.SuggestedFileName, showDialog: true); 
      } 
     } 
    } 

    public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) 
    { 
     var handler = OnDownloadUpdatedFired; 
     if (handler != null) 
     { 
      handler(this, downloadItem); 
     } 
     ///This is where i want to make the control visible but i cant seem to reference it. 
     panelDownloads.Visible = true; 
    } 
} 
+0

那麼事件OnDownloadUpdatedFired註冊? – Abhishek

回答

0

經過大量的谷歌搜索之後,我將其添加到您的代碼中。我認爲這是對的。希望它有幫助,或至少給你一個開始:

DownloadHandler downer = new DownloadHandler(this); 
browser.DownloadHandler = downer; 
downer.OnBeforeDownloadFired += OnBeforeDownloadFired; 
downer.OnDownloadUpdatedFired += OnDownloadUpdatedFired; 

private void OnBeforeDownloadFired(object sender, DownloadItem e) 
{ 
    this.UpdateDownloadAction("OnBeforeDownload", e); 
} 

private void OnDownloadUpdatedFired(object sender, DownloadItem e) 
{ 
    this.UpdateDownloadAction("OnDownloadUpdated", e); 
} 

private void UpdateDownloadAction(string downloadAction, DownloadItem downloadItem) 
{ 
    /* 
    this.Dispatcher.Invoke(() => 
    { 
     var viewModel = (BrowserTabViewModel)this.DataContext; 
     viewModel.LastDownloadAction = downloadAction; 
     viewModel.DownloadItem = downloadItem; 
    }); 
    */ 
} 

// ... 

public class DownloadHandler : IDownloadHandler 
{ 
    public event EventHandler<DownloadItem> OnBeforeDownloadFired; 

    public event EventHandler<DownloadItem> OnDownloadUpdatedFired; 

    MainForm mainForm; 

    public DownloadHandler(MainForm form) 
    { 
     mainForm = form; 
    } 

// ... 
+0

這有助於解決下載文件(例如.mobi電子書)的嘮叨問題,如果下載鏈接的目標爲「_blank」。 如果沒有目標,則觸發下載對話框。使用_blank目標,我必須禁止彈出窗口並在瀏覽器中打開一個新的自定義選項卡,但是當發生這種情況時,不會觸發下載對話框。 –

相關問題