2011-01-16 8 views
0

VBAでは、ユーザーフォームをカスタムインターフェイスで実装し、インターフェイスで定義されたプロパティのみがユーザーフォームのVBA Intellisenseに表示されます。 VB.Net(2010)でこの機能を複製しようとしましたが、すべての基本フォームのプロパティは引き続き表示されます。VB.Netでインターフェイスを使用して標準フォームのプロパティを表示しない

Public Interface iTest 
    Property TestString As String 
End Interface 

Public Class Form1 
    Implements iTest 
    Public Property TestString As String Implements iTest.TestString 
     Get 
      TestString = Me.txtTest.Text 
     End Get 
     Set(ByVal value As String) 
      Me.txtTest.Text = value 
     End Set 
    End Property 
End Class 

リチャード・ハインから同様の質問への答えはhereですが、それは、C#およびユーザーコントロールのためだ、と私はそれを変換することができませんでしだ。

+1

継承の目的ではありません、それはどちらか動作しません。子クラスには親クラスのすべてのプロパティがあるため、クラスがインターフェイスを実装していても、常にフォームのすべてのプロパティとメソッドを使用できます。 –

答えて

1

フォームインスタンスを直接インターフェイスにキャストすると、インターフェイスメンバーだけがインテリジェンスを持つことになります。例えば

Dim f1 As New Form1() 
f1.ShowDialog() 'etc will show here 
Dim f1AsiTest As iTest = CType(f1, iTest) 
f1AsiTest.TestString = "test1" 'only member available 

または

Dim f2 As iTest = New Form1() 
f2.TestString = "test2" 'only member available 
+0

おかげでトム。これをしない理由がありますか?つまり悪い練習ですか? –

+0

心配はいりません!練習に関しては、あなたのプロジェクトについてのフォームを渡すときに役立つかもしれません。たとえば、すべてのフォームでこのインタフェースを使用することができ、Form型を受け入れるのではなく、代わりにiTest型を受け入れることができます。私はWinFormsで継承が少し苦しいことがあることを発見しました。私たちのプロジェクトでは、フォームに基本クラスを使用し、継承します。フォームの機能性を隠す必要はありませんが、「隠す」必要がある特定の仕様がある場合は、インターフェイスを渡すだけで(別のメソッドなどに)これに最適です。ぶらぶら! – Tom

2
Dim itf As iTest = New Form1() 
itf.[and here you'll only see the iTest members show up] 
+0

ハンス、迅速な対応に感謝します。私が両方とも正しい投票をすることができれば、私はそうするでしょう。私はトムに対する私のコメントで尋ねた質問に関するどんな考えにも興味があります。 –

関連する問題