2010-09-06 90 views
0

成員,我需要一些建議,請在達到特定結果的最佳方式......C#訪問形式從單獨的類

我的情景......

我有一個Form1類,這是我的主要形成一個圖片框。

我有第二個類叫攝像頭,使用事件處理程序從我的攝像頭抓取幀(位圖)。

然後我想以最好的方式將這個幀傳遞給主窗體中的圖片框。

在主窗體的那一刻我的代碼:

public static void setPB(Bitmap image) 
{ 

var form = Form.ActiveForm as Form1; 
form.pbWebCamDisplay = image; 

} 

然後在相機類我用

Form1.setPB(設置currentFrame);

這工作正常,但我不確定這是否是最好的編程習慣?是否可以使用自定義事件?

預先感謝任何幫助

湯姆

回答

0

我會在Camera類上創建一個方法,它會拍攝圖片並返回一個Bitmap對象。

所以在onload或在按鈕的OnClick,調用方法和返回值設置爲圖片框...

var picture = new Camera().TakePicture(); 
myPictureBox.Image = picture; 

類似的東西:)

編輯:如果Camera類是事件驅動組件(Camera.NewFrame事件),嘗試:

(構造函數):

var camera = new Camera(); 
camera.OnNewFrame += new OnNewFrameEventHandler(MyEventHandler); 

(事件處理程序)

public void MyEnventHandler(EventArgs comingFromComponent) 
{ 
    var image = comingFromComponent.Frame; // (hopefully this is the case :)) 
    myPictureBox.Image = image; 
} 
+0

感謝您的回覆,不幸的是我需要圖片框來顯示實時流。我最初在主窗體中使用計時器來獲取圖像,但是,計時器和新幀事件處理程序不同步,因此難以正確處理位圖。 – TomP89 2010-09-06 10:40:38

+0

在這種情況下,你不能只在表單中訂閱事件嗎?我會更新我的答案... – Bertvan 2010-09-06 10:55:22

+0

這將是理想的,我不知道這一功能。你能否給我一些示例代碼。 – TomP89 2010-09-06 10:58:20

0

我會用事件,如果我處在你的位置。

+0

你能指出我在正確的方向如何實施這個請嗎?謝謝 – TomP89 2010-09-06 10:38:06

0

是的,我會說是非常好的。您有一個攝像頭班負責處理攝像頭輸入,併爲您的表單的私人成員提供公共設置器。我不會改變一點。

通過這種方式,您可以將功能的不同職責分爲不同的類。不要在Form類中處理相機事件,而應該像在做一樣。

0

當然,事件是正確的選擇。您可以使用它們實現觀察者設計模式。 您目前的實施不是最佳實踐 - 它會強制Camera和Form類之間的緊密耦合。

+0

嗨,如果您有任何好的鏈接,請您詳細說明。感謝您的幫助 – TomP89 2010-09-08 16:39:07

+0

您現在的位置:http://msdn.microsoft.com/en-us/library/ee817669.aspx – 2010-09-09 07:07:54

+0

微軟呼叫觀察者的事件事件模式,很高興知道。 – 2010-09-09 07:08:51

0

是什麼驅使使Camera類抓取圖片的事件? 這很重要。

如果窗體本身觸發事件,則甚至不需要窗體中的PictureBox設置器。

順便說一句,我與豪爾赫科爾多瓦,二傳手和搶事件都是你需要的。 奧卡姆剃鬚刀。

+0

所以..我使用Aforge框架(aforgenet.com),它擁有自己的自定義事件處理程序,它抓取框架。 – TomP89 2010-09-06 10:38:53