2017-09-12 8 views
0

私は、フォームで別のことをするべきクラスを持っています。インターフェイスのケースですか?

これらの「事が」フォームに固有であるため、私はこのようなフォームへの参照格納します。

Friend Class clsEdit 

    Private m_Form As frmMain 

をそして私は、このようなクラスに渡し:

Public Sub New(ByRef uForm As frmMain) 

    m_Form = uForm 

End Sub 

私のクラスでこれらの「もの」を行うべきときは、私は次のようにします:

MyEditClass.DoThings() 

内部的には次のようになります。

Public Sub DoThis() 

    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers() 

End Sub 

Protected Overrides Sub Finalize() 
    m_Form.DoSomethingThatOnlyThisFormCanDo() 
End Sub 

これで、別のフォームでもclsEditを使用できるようになりました。 この他のフォームには、機能 "DoThings"と "DoSomethingThatOnlyThisFormCanDo"もあります。

私はこの

Private m_Form As Form 

にm_Formの宣言を変更した場合しかし、私はもうこれを行うことはできません。

m_Form.DoThings() 

を... "DoThingsは" ではありませんので、 "フォーム"のプロパティ/機能。

そして、私はこれにそれを変更する場合:

Public Sub New(ByRef uForm As frmMain) 

    m_Form = uForm 

End Sub 

誰もが、私はこれを行うことができる方法を教えてもらえます:

Private m_Form As frmOther 

...私はもうはそれを行うことはできませんか?

+0

フォームはすでにクラスです。フォームに別のクラスで取り除くのではなく、メソッドを追加するだけで済みます。インターフェースがあなたの投稿にどのように使われているかわからない – Plutonix

+1

はい、同じメソッドと関数を持つ2つの異なるフォームがある場合は、インターフェイスを作成して代わりに使用してください。 – LarsTech

+0

このケースのインターフェイスでキックスタートを教えてください。 – tmighty

答えて

3

あなたのインターフェイスを作成します。

Public Interface IFormStuff 
    Sub SetHookPaused(value As Boolean) 
    Sub StopCommonTimers() 
End Interface 

は、クラスのインタフェース変数でフォーム変数を置き換えます。

Public Class clsEdit 
    Private m_Form As IFormStuff 

    Public Sub New(f As IFormStuff) 
    m_Form = f 
    End Sub 

    Public Sub DoThis() 
    m_Form.SetHookPaused(True) 
    m_Form.StopCommonTimers() 
    End Sub 
End Class 

は、各フォームのインタフェースを実装します。

Public Class Form1 
    Implements IFormStuff 

と各フォームでこれらのインターフェイススタブを実装する必要があります。

Public Sub SetHookPaused(value As Boolean) Implements IFormStuff.SetHookPaused 
    ' do something 
End Sub 

Public Sub StopCommonTimers() Implements IFormStuff.StopCommonTimers 
    ' do something 
End Sub 

は、フォームレベルでクラスを作成する必要があります:それの要点です

を。

関連する問題