2011-06-23 95 views
1

我需要将一个字符串转换为一个对象(这是一个过程的参数)的帮助。我也试过Ctype但它没有工作。vb.net字符串到对象

Public Sub procName(lbl1 as Label, lbl2 as Label, lbl3 as Label) 'supposed i have 10 labels 

     'long Code here 

     for i as integer = 1 to 3 
      dim xL as label = DirectCast(Controls("lbl" & i.ToString), Label) 
      xL.text = i.Tostring '(error here: Object reference not set to an instance of an object.) 
     next 

End Sub 

回答

2

DirectCast(控制( “LBL” & i.ToString),标签)释放出空值(或没有)

是什么控件( “LBL” & i.ToString)返回?它是什么类型的标签?

编辑:

我没有安装VB ...所以我无法验证下面的代码...

for i as integer = 1 to 3 
     For Each acontrol As Control In Controls 
      If acontrol.Name = "lbl" & i.ToString Then 
       xL.text = i.Tostring 
      End If 
     Next 
    Next 
+0

是的。它应该返回一个标签。 –

+0

为什么它会返回空值? –

+0

您可以检查并查看编辑后的代码是否有效?此外,窗体上的控件的名称是lbl1,lbl2,lbl3对不对?同样的情况? – Viv

1

的代码,你正在展示预计将在找到三个Label控件你的表单(或者至少在正在运行的代码的范围内),命名为lbl1,lbl2和lbl3。

错误是告诉你一个或多个这些控件无法找到。

2

正如Vivek指出的,xL是Nothing。对于你的给定ii.ToString()不能抛出空引用异常。

尝试

for i as integer = 1 to 3 
     dim xL as label = DirectCast(Controls("lbl" & i.ToString), Label) 
     If xL IsNot Nothing 
      xL.text = i.Tostring  
     End If 
    next 
+0

我不明白为什么XL是没有:(所以我怎么可以重新编码,这样我可以设置文本值为lblA,lblB和lblC? –

1

而不是通过3个不同的标签你怎么样通过标签的列表,并遍历它。这样它会使你的功能更加动态和清洁。

Public Sub procName(ByVal labels As List(Of Label)) 

     Dim i As Integer = 1 

     For Each lbl As Label In labels 

      Dim xL As Label = lbl 

      xL.Text = i.ToString 

      i += 1 
     Next 

End Sub