2013-08-22 234 views
1

首先,我會解釋我的程序。總是返回空值

我有一個winform,我用作我的控制面板。從這裏我可以使用鼠標拍攝桌面屏幕截圖來定義區域。就像剪切工具在窗口中的工作方式一樣。

,屏幕截圖使用由稱爲Form1的另一種形式跑到我的屏幕截圖類生成。第二種形式沒有其他代碼,只是用於生成屏幕快照將使用的矩形。從這裏開始,拍攝的屏幕截圖存儲在剪貼板中,並傳回到我的屏幕截圖類。

現在,從這裏我要的是在我的控制面板顯示此圖像拍攝的圖片框。完全像剪切工具的工作原理。然而,我寫過的代碼將這個圖像從屏幕截圖類傳遞給控制面板,它抱怨事件處理程序總是返回爲空。

我已經寫了這個過程的代碼如下:

Image img = (Image)bitmap; 
if (OnUpdateStatus == null) return; 

ProgressEventArgs args = new ProgressEventArgs(img); 
OnUpdateStatus(this, args); 

我試着註釋掉if語句,但隨後OnUpdateStatus拋出異常的處理說它不再存在。現在

,在我的控制面板形式我想抓住這形象,用下面的代碼顯示:

private ScreenCapture _screenCap; 

    public ControlPanel() 
    { 
     InitializeComponent(); 
     _screenCap = new ScreenCapture(); 
     _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus; 

    } 



    private void _screen_CapOnUpdateStatus(object sender, ProgressEventArgs e) 
    { 

     imagePreview.Image = e.CapturedImage; 
    } 

我這個花了幾個小時,但我不能工作了,爲什麼圖像不會顯示在我的ControlPanel上的圖像框中。任何一個擁有全新眼睛的人都能幫助我嗎?爲什麼它是我拍攝的屏幕截圖圖像,沒有顯示在我的ControlPanel上的圖片框中?

+7

請具體說明並僅發佈相關代碼 – Ehsan

+1

'我已花費了數小時的時間'我們不想在此花費數小時,請僅發佈相關或可疑代碼? –

回答

3

這是問題,我覺得(有很多的代碼來滑過 - 一個簡短而完整的例子會更好):

ScreenCapture capture = new ScreenCapture(); 
capture.CaptureImage(...); 

這是一個新實例的ScreenCapture。它沒有附帶任何事件處理程序(這就是爲什麼你看到的OnUpdateStatus一個的null值,如果你想使用已在ControlPanel類創建的實例,你要傳遞您的Form1(例如在構造函數中)

+0

即使我存儲在剪貼板中的圖像我很抱歉,但我不知道該怎麼做你的建議 – N0xus

+0

@ N0xus什麼:在圖像的存儲是不相關的你正在尋找的價值'CaptureImage'方法中的'OnUpdateStatus',對嗎?所以它重要*而不是'ScreenCapture'你調用方法。我懷疑例如,您需要將_screenCap傳遞給Form1的構造函數(這需要將其存儲在字段中),以便在調用Form1中的CaptureImage時使用*相同的實例*。 –