- PR -

独自のコントロールをまとめて操作する方法

投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-04-12 19:45
お世話になります。
さかもとと申します。
VB2005
WinXP
Winアプリ

 現在、コンボボックスを継承したコンポーネント
を複数作成しています。
(コンボA、コンボB、コンボC・・・・)

 それぞれ、1つのメソッドを持っており、メソッド名
は共通ですが、処理内容が若干異なります。
(メソッド名を仮に「Sakamoto」とします)
 各コンボボックスをフォームのグループボックスAに
 配置して、
フォームのロード時に

コンボA.Sakamoto
コンボB.Sakamoto
コンボC.Sakamoto



としていますが、もう少しスマートに出来るように
LoadComboBoxというクラスを作成しました。
処理内容としては、上記のグループボックスA
にコンボボックス(A〜C・・・)が含まれる時に
それぞれの「Sakamoto」というメソッドを処理と
なります。
そこで

コード:
Public Sub SetCombo(ByVal hParent As Control)

        Dim cmb As ComboBox
        For Each hControl As Control In hParent.Controls
            
            If TypeOf hControl Is ★ComboBox★ Then
                cmb = CType(hControl, ★ComboBox★)
                'コンボA〜C.Sakamoto
            End If
            
        Next hControl

    End Sub



としましたが、「★」で囲まれた部分に作成したコンボA〜C
を反映させるにはどのように記述すれば良いでしょうか?
それぞれのコンボボックス名(A〜C)を個別に指定すれば
出来るのですが、それだと本末転倒かと思いまして・・・。


宜しくお願い致します。

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-12 20:07
インターフェース経由にすればいいのかな?
★ComboBox★ → ISakamoto とかにすれば

コード:

Public Interface ISakamoto
Sub Sakamoto
End Interface

Public Class コンボA
Inherits System.Web.UI.WebControls.DropDownList
Implements ISakamoto

Public Sub Sakamoto() Implements ISakamoto.Sakamoto
' 何かの処理
End Function
End Class




# Sub のくせに Return していたので削除


[ メッセージ編集済み 編集者: かるあ 編集日時 2006-04-12 20:52 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-04-12 20:44
かるあ様

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

おっしゃるとおりインターフェース経由で可能でした。
インターフェース経由でのキャストが出来るとは
まったくの勉強不足でした・・・。

本当にありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-13 02:26
コード:

    Public Shared Sub SetCombo(ByVal hParent As Control)
        For Each hControl As Control In hParent.Controls
            If TypeOf hControl Is ISakamoto Then
                DirectCast(hControl, ISakamoto).Sakamoto()
            End If
        Next hControl
    End Sub


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-04-13 07:45
じゃんぬねっと様
おはようございます。

>DirectCast(hControl, ISakamoto).Sakamoto()

なるほど、こうすればCType(・・・・とせずにより
簡潔になるんですね。

勉強になります。
遅い時間にありがとうございました。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-13 09:14
引用:

さかもとさんの書き込み (2006-04-13 07:45) より:

なるほど、こうすればCType(・・・・とせずにより簡潔になるんですね。


DirectCast でなくとも CType でも直接呼び出すことは可能です。
型が決まりきっているので変数に格納せずに直接呼び出しているに過ぎません。
DirectCast と CType は使い分けは別のポイントですね。

CType は参照型でない場合くらいにしか使わないので、DirectCast を使っているにすぎません。
DirectCast が使えるところは DirectCast を使っておいて、
'明示的に' CType にすべきところで CType を使うようにしています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-04-13 09:49
じゃんぬねっと様
お世話になります。

早速二つの差を調べようと[DirectCast]でGoogle叩いてみたら
じゃんぬねっとさんのサイト内「CType と DirectCast の違い」
が一発ヒット。

じっくり読ませて頂きます。

ありがとうございました。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-13 09:51
引用:

さかもとさんの書き込み (2006-04-12 20:44) より:

インターフェース経由でのキャストが出来るとは
まったくの勉強不足でした・・・。



インターフェイスを使ったデザインパターンは覚えておくと
いろいろなところで活用できるので便利ですね

スキルアップ/キャリアアップ(JOB@IT)