如何将这段VB6代码转换为C#?
我已经尝试了自己并且到目前为止:
编辑:我正在尝试翻译的代码存在于此处: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx
答案 0 :(得分:7)
您还没有显示EventThief
代码,这使得无法分辨。但总的来说:
With expression
.Foo = a
.Bar = b
End With
会转换为
var x = expression;
x.Foo = a;
x.Bar = b;
(当然你可以明确指定类型......)
这里的共性是expression
仅被评估一次。在您展示的特定代码中,当然不需要额外的变量,因为表达式首先只是 局部变量。
您的实际错误看起来只是与EventThief.RIGHT_DOWN
等类型而不是WITH语句有关。
编辑:好的,您现在已经展示了 使用布尔值的原始EventThief代码......但您没有显示移植 EventThief
码。你写道:
它说et.LEFT_UP很短
......但不应该。原来它是Boolean
,为什么它在你的端口是short
?
答案 1 :(得分:3)
我不太确定,但我认为VB中的以下内容
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
可以大致翻译为
var EventStealingInfo = new EventThief(){
RIGHT_DOWN = true,
RIGHT_UP = true
};
其中RIGHT_UP
和RIGHT_DOWN
是EventStealingInfo
类中的公共属性。
C#中的这个构造称为Object Initializer。
答案 2 :(得分:2)
喜欢这样
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
变为
EventStealingInfo.RIGHT_DOWN = true;
EventStealingInfo.RIGHT_UP = true;
答案 3 :(得分:1)
我认为你离它更近了:
EventThief EventStealingInfo = new EventThief()
{
RIGHT_DOWN = true,
RIGHT_UP = true
};
答案 4 :(得分:1)
我可以致电您的提案选项A 。
我可以建议选项B和选项C,我认为这会更容易吗?
选项B
1.从Microsoft's C# code开始处理Windows挂钩。
2.根据需要调整它,查看API调用VB6 code makes。
选项C
1.从community code获取构建的VB6 DLL
2.通过Interop从新的C#应用程序调用该DLL。
答案 5 :(得分:0)
据我所知,在C#中没有等效的With,你需要在引用其成员函数/属性时明确列出该对象。
答案 6 :(得分:0)
没有C#等价物。
答案 7 :(得分:0)
难道你不能只将LEFT_UP的类型改为bool吗?
查看您的代码以及使用EventThief的方式,您可能希望使用标志枚举,以便您可以设置单个位,然后进行按位比较。
答案 8 :(得分:0)
“with”关键字只是在设置多个属性时保存重新输入变量名称的快捷方式。 C#中没有等价物。
即使你有一个问题,你显然也试图将布尔值分配给短数据类型。
EventThief课程中有什么内容?你能简单地将LEFT_UP字段设为布尔值吗?