DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ComboBoxとListBoxで共通の処理をしたい

環境/言語:[VS2005]
分類:[.NET]

こんにちは。

インターフェースをあわせたメソッドをつくっていますが
キャストがうまくいかなくて動作してくれません。

記述しているのは次のテストコード

Private Sub InitializeItem(ByRef TargetCollection As ICollection(Of Object))
    TargetCollection.Clear()
    TargetCollection.Add("テストA")
    TargetCollection.Add("テストB")
    TargetCollection.Add("テストC")

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'InitializeItem(ComboBox1.Items)
    InitializeItem(CType(ComboBox1.Items, ICollection(Of Object)))
    InitializeItem(ListBox1.Items)

    Dim ArrayList1 As New List(Of Object)
    InitializeItem(ArrayList1)

    MsgBox(ArrayList1.Item(2).ToString)
End Sub

ComboBox.ItemsでもListBox.ItemsでもArrayListでも
同じ動きをするメソッドを作りたいのですが
このような場合、どのようにするのが適切なのでしょうか?

上記コードでは
ArrayListに対するメッセージボックスは動きましたが
ComboBoxとListBoxに対しても同じ処理をしたいのです。

InvalidCastExceptionが発生します。

教えてください。よろしくお願いします。
ICollection ではなくて IList でいけました。

Private Sub InitializeItem(ByRef TargetList As IList)

    TargetList.Clear()
    TargetList.Add("テストA")
    TargetList.Add("テストB")
    TargetList.Add("テストC")

End Sub
■No25520に返信(FutoNekoさんの記事)
やり方はかわりますが
派生クラスを作るのはいかがでしょうか

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim source As New List(Of String)
        source.Add("hoge")
        source.Add("fuga")
        source.Add("mogera")
        
        InitializableListbox1.initializeItem(list)
    End Sub
End Class

Interface IItemInitializable
    Sub initializeItem(ByVal source As List(Of String))
End Interface

Class InitializableListbox
    Inherits ListBox
    Implements IItemInitializable

    Public Sub initializeItem(ByVal source As System.Collections.Generic.List(Of String)) _
        Implements IItemInitializable.initializeItem

        For Each s In source
            Items.Add(s)
        Next
    End Sub
End Class
■No25521に返信(ひらぽんさんの記事)
> ICollection ではなくて IList でいけました。
> Private Sub InitializeItem(ByRef TargetList As IList)

ありがとうございました。

ひらぽんさんの方法で
いくつかの処理を共通化したかったので
大変わかりやすく、対応できました。

もりおさんのやり方も勉強になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板