我在项目中使用自定义listview控件,我在代码项目中找到了该控件。此控件具有ImageGetter的属性,用于将图像设置为列。作者提供了使用它的示例,但它是用C#编写的。我尝试使用在线转换器,但所有这些都无法翻译代码,而且此代码的作者也未提供要求提供VB.net代码的问题的答案。所以我需要一个将下面的代码翻译成VB.Net。
this.olvColumn18.ImageGetter = delegate(object row) {
if ("AEIOU".Contains(((Person)row).Name.Substring(0, 1)))
return 0;
else if (((Person)row).Name.CompareTo("N") < 0)
return 1;
else
return 2;
};
另外我想问什么是委托?这是一个功能还是别的什么。 这是控制链接
http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView
答案 0 :(得分:3)
您不必使用匿名代理。您可以简单地创建一个函数并使用AddressOf
,就像文章中所示。
Private Function PersonColumnImageGetter(object rowObject) As Object
Dim p As Person = DirectCast(rowObject, Person)
If "AEIOU".Contains(p.Name.Substring(0, 1)) Then
Return 0
Else If p.Name.CompareTo("N") < 0 Then
Return 1
Else
Return 2
End If
End Function
你可以使用(codeproject文章使用this
来分配它,但这对VB.NET来说是错误的,而是使用Me
):
Me.personColumn.ImageGetter = New ImageGetterDelegate(AddressOf PersonColumnImageGetter)
或者如果您想使用匿名代表:
Me.personColumn.ImageGetter = Function (object rowObject) As Object
Dim p As Person = DirectCast(rowObject, Person)
If "AEIOU".Contains(p.Name.Substring(0, 1)) Then
Return 0
Else If p.Name.CompareTo("N") < 0 Then
Return 1
Else
Return 2
End If
End Function
我建议您阅读VB.NET文档(如果需要,还需要C#文档)如何编写内容。通常,MSDN上的代码示例都有两种语言版本,因此学习这两种语法非常容易。
答案 1 :(得分:1)
这是一个通用解决方案:在调试模式下编译代码,然后使用Reflector等工具将其反编译为另一种语言。这就是.NET的魅力。