2010-10-12 70 views
0

這是我的情況,我想知道是否有可能完成什麼我打算做:觸發方法 - Windows窗體

我有一個類庫(在C#中作出的)是內部有一個從System.Windows.Forms.Form繼承的類(名爲SForm)。在那個類中,我聲明瞭一些字符串以及設置這些字符串值的方法。

public class SForm : Form 
{ 
    public string _myDate; 
    public void setTime(string val) { _mydate = val; } 
} 

在另一類,我做出觸發回調的API了電話,當回調發生時,調用的方法中,從表繼承的類設置值。所有的工作都很好,所有的類都被封裝在一個DLL中。

public class Events 
{ 
    private SForm _form; 
    public void setForm(SForm f) 
    { 
    _form = f; 
    } 
    public void connect() 
    { 
    //when I call this method, connects to a device using the API, and if 
    //it's succesful, triggers OnCallback... 
    } 
    private void OnCallback(string retVal) 
    { 
    _form.setTime(retVal); //this works 
    } 
} 

這裏是我的問題:我有一個桌面應用程序,在VB中,使用該DLL,當我從SForm繼承,我想由DLL觸發回調調用方法在我的形式

Public Class Form1 
    Inherits SForm 

    Private _se As Events 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ 
    Handles Me.Load 
    _se = New Events() 
    _se.setForm(Me) 
    _se.connect() 
    End Sub 

    Private Overloads Sub setTime(ByVal s As String) 
    MessageBox.Show(s) 
    End Sub 

我需要的是回調觸發在這種形式的「setTime」方法,並顯示我的DLL發送的值(我可以推一個按鈕並訪問_myDate字符串的值,但我需要它自動)。那可能嗎?怎麼樣??

謝謝百萬

回答

1

您需要聲明setTime()虛擬,以便您可以覆蓋它。不要忘記調用基本方法。

+0

我不明白...我應該在哪裏調用基本方法?我需要的是,當API觸發OnCallback時,它會異步觸發VB窗體上的方法... – ditto1977 2010-10-12 14:35:49

+0

您應該使用override方法調用它。爲什麼這必須是異步的?使用表單時非常棘手,只能在創建它們的同一個線程中觸摸控件。 – 2010-10-12 14:48:53

+0

,因爲我不知道什麼時候OnCallback會被觸發......我只是真的很想知道什麼時候調用這個方法,所以我認爲讓OnCallback調用一個Form類的方法,會讓它「推」如果這個表格是繼承的... – ditto1977 2010-10-12 14:55:10