- PR -

Formsの項目をつかったInterface

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-09-08 13:48
msoです。

下記のようなプログラムを作成したのですが、
ポリモフィズムを使ってリファクタリングを行いたいと思ってます。

そこで、問題なのですがTextBoxとかComboBoxのInterface型はあるのでしょうか?
MSDNやGoogleで検索をしたのですが、うまく見つけることができませんでした。

何かアドバイスをいただけると幸いです。

コード:
Dim ArrCheckList As ArrayList = new ArrayList

ArrCheckList.Clear
ArrCheckList.Add(Me.TextBox1)
ArrCheckList.Add(Me.TextBox2)
ArrCheckList.Add(Me.TextBox3)
ArrCheckList.Add(Me.TextBox4)
ArrCheckList.Add(Me.ComboBox1)
ArrCheckList.Add(Me.ComboBox2)
ArrCheckList.Add(Me.ComboBox3)
ArrCheckList.Add(Me.ComboBox4)


For Each obj In ArrCheckList
	If TypeOf obj Is TextBox Then
		Dim objTextBox As TextBox = CType(obj, TextBox)
		MsgBox (objTextBox.text)
	ElseIf TypeOf obj Is ComboBox Then
		Dim objComboBox As ComboBox = CType(obj, ComboBox)
		MsgBox (objComboBox.text)
	End If
Next



Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-09-08 17:15
諸農です。

オブジェクトがコントロール型だったとして
そのコントロールのTextプロパティを参照したいって事でしょうか?

であれば、Control型でアクセスすればいいのではないでしょうか?


_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-09-08 17:18 ]
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-09-09 00:57
msoです。

引用:

Jubeiさんの書き込み (2004-09-08 17:15) より:
諸農です。

オブジェクトがコントロール型だったとして
そのコントロールのTextプロパティを参照したいって事でしょうか?

であれば、Control型でアクセスすればいいのではないでしょうか?




当初はControlでやろうと思っていたのですが、
Interfaceが良いかと悩んでいました。
やりたいことを再度よく考えていたらControlでも大丈夫だと思います。


ただ、何かの縁だとおもってInterfaceでも対応をしたいって
考えています。
何か見つけたらこっちにまた書き込みます。

ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-09 08:16
引用:

msoさんの書き込み (2004-09-09 00:57) より:

当初はControlでやろうと思っていたのですが、
Interfaceが良いかと悩んでいました。
やりたいことを再度よく考えていたらControlでも大丈夫だと思います。

ただ、何かの縁だとおもってInterfaceでも対応をしたいって
考えています。


 ん?
 例えば、「TextBox クラスについて」というトピックを見ると、このクラスの宣言が書いてあります。
コード:
Public Class TextBox
   Inherits TextBoxBase


よくわかるのでVB.NETを引用。これを見ると、TextBoxには「インタフェースは実装されていない」ことがわかります。つまり、「Implements」句が無い、ということです。同じページに継承関係も書いてありますから、継承を上にたどると、System.Windows.Forms.Controlまで、インタフェースは使用していないことがわかります。Controlが使用しているインタフェースは「ISynchronizeInvoke」と「IWin32Window」ですが、これらは名前から、同期とWin32API呼び出しのものであろうことが想像されます。
 つまり、ご要望のインタフェースは無い、ということです。
 では、どうやってインタフェースを使用するかというと、適切なインタフェースを宣言して、そのインタフェースを使用する、TextBoxやComboBoxを継承したクラスを作ることになります。
コード:
Public Class MyTextBox
   Inherits TextBox
   Implements MyInterface


 振る舞い(メソッド)を追加するならともかく、プロパティにアクセスするために、しかも親クラスでアクセスすれば取得できるプロパティにアクセスするために、インタフェースを追加する、つまりコーディングをするのでしょうか。

 非常に興味深いので、インタフェースを使おうとした経緯をお聞かせ願えるでしょうか。
1

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