0

在VB.net(2012年),我有以下代碼:VB.net選項嚴格,listview.items.add(itm.clone)過載

For Each itm As ListViewItem In Me.lvCustomers 
    If CDbl(itm.Tag) <> customer.Id Then Me.lvMerges.Items.Add(itm.Clone) 
Next 

隨着選項嚴格上我得到以下錯誤:

Error 2 Overload resolution failed because no accessible 'Add' can be called with these arguments: 'Public Overridable Function Add(value As System.Windows.Forms.ListViewItem) As System.Windows.Forms.ListViewItem': Option Strict On disallows implicit conversions from 'Object' to 'System.Windows.Forms.ListViewItem'. 'Public Overridable Function Add(text As String) As System.Windows.Forms.ListViewItem': Option Strict On disallows implicit conversions from 'Object' to 'String'.

我可以做一個lvMerges.Items.Add(ITM),它不會引發錯誤,但後來我不得不從lvCustomers列表視圖,這是我不想做刪除它。

有人可以解釋我如何使這個工作正常無需關閉選項嚴格?

目標是複製ListViewItem與所有SubItems。

+0

如果你使用'(ListViewItem)itm.Clone()'它能工作嗎? – Adrian 2013-05-10 03:49:32

+1

好吧,出於某種原因,我忘記了我不在c#中......在下面添加了正確的語法作爲答案。 – Adrian 2013-05-10 04:31:04

回答

3

您收到有告訴你,與Option Strict On你不能做隱含從鑄造到ObjectStringListViewItem錯誤。所以你需要做顯式的轉換。

For Each itm As ListViewItem In Me.lvCustomers 
    If CDbl(DirectCast(itm.Tag, String) <> customer.Id Then Me.lvMerges.Items.Add(DirectCast(itm.Clone, ListViewItem)) 
Next 

這是否行得通?

+0

有工作 - 謝謝! – Jeff 2013-05-11 01:59:09

+1

太棒了:D樂於助人。 – Adrian 2013-05-11 02:14:10