gpt4 book ai didi

c# - vb.net 到 c# 帮助

转载 作者:行者123 更新时间:2023-11-30 14:03:00 24 4
gpt4 key购买 nike

嗨 我有一个非常小的 vb.net 项目,但它使用专有的 com 对象,该对象连接在 VB 项目中以处理来自它的事件!

我已经更改了 com 对象的名称,但语法上以下代码是正确的:

Public Class Form1
Private WithEvents PM As comObj.PManager
Delegate Sub SetTextCallback([text] As String)



Private Function PreTransmit(ByVal s As String) As String Handles PM.PreTransmit
Me.SetText(s)
Return s
End Function

Private Function PreResponse(ByVal s As String) As String Handles PM.PreResponse
Return s
End Function
Private Sub SetText(ByVal [text] As String)

If Me.textBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.textBox1.Text = [text]
End If
End Sub


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
PM = CreateObject("ObjName.PManager")
End Sub
End Class

上面的代码在单击按钮时创建对象,每当对象获取数据时,它都会引发一个事件,将数据传递到预传输或预接收中。

我只是想不出如何用 c# 做这个

vb

Private WithEvents PM As comObj.PManager

c#

private comObj.PManager PM;

但是 WithEvents 呢?

vb

Private Function PreResponse(ByVal s As String) As String Handles PM.PreResponse
Return s
End Function

c#

private string PreResponse(string s)
{
return s;
}

但是 Handles PM.PreResponse 呢?

vb

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
PM = CreateObject("ObjName.PManager")
End Sub

c#

private void Button1_Click(System.Object sender, System.EventArgs e)
{
PM = Interaction.CreateObject("ObjName.PManager");
}

不确定我做错了什么!?

我可以编写一个 vb.net 类并在 C# 中使用它吗?

最佳答案

VB.NET 的 WithEvents 关键字在 C# 中没有类似物。 IIRC,VB.NET 将所有 WithEvents 变量转换为属性,然后在 setter 中它显式附加/分离事件处理程序,就像您在 C# 中看到的那样。

由于 C# 没有此功能,因此您必须自己进行跟踪。由于您正在显式创建对象,因此这应该不难做到。对于要处理的每个事件,您只需要做的就是:

PM.EventName += new EventHandlerType(EventHandlerMethodName);

在大多数情况下,编译器可以推断出EventHandlerType,因此您不需要包含它。这意味着您的代码可以变成:

PM.PreResponse += this.PreResponse

关于c# - vb.net 到 c# 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com