Winforms 继承类windows窗体中的触发器方法

Winforms 继承类windows窗体中的触发器方法,winforms,inheritance,callback,Winforms,Inheritance,Callback,这是我的场景,我想知道是否有可能完成我打算做的事情: 我有一个类库(用c#制作),里面有一个从System.Windows.Forms.Form继承的类(名为SForm)。在那个类中,我声明了一些字符串,以及设置这些字符串值的方法 public class SForm : Form { public string _myDate; public void setTime(string val) { _mydate = val; } } 在另一个类中,我对触发回调的API进行了一些调用,

这是我的场景,我想知道是否有可能完成我打算做的事情:

我有一个类库(用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字符串的值,但我需要它是自动的)。可能吗?怎么做


非常感谢,您需要声明setTime()为虚拟,以便可以覆盖它。别忘了调用base方法。

我不明白。。。我应该在哪里调用基方法?我需要的是,当API触发OnCallback时,它会异步地触发我的VB表单上的方法……您应该从override方法调用它。为什么这必须是异步的?使用表单时非常棘手,您只能触摸创建表单的同一线程中的控件。因为我不知道OnCallback何时会触发。。。我真的很想在调用这个方法时得到通知,所以我想在表单类上进行OnCallback调用一个方法,如果这个表单被继承,它将被“推送”…好的,我得到了它。。。我将SForm类和方法“setTime()”声明为“abstract”。现在,当我运行从SForm继承的表单时,对setTime的所有调用都被重定向到该表单中实现的方法(使用覆盖)。我尝试使用虚拟机,但没有得到预期的结果。我希望我的方法是正确的。谢谢汉斯的帮助!