することはできる参照ソースコードを含むソースファイルvb.net,などをサポート?

StackOverflow https://stackoverflow.com/questions/2136701

質問

どうなるかはわからないがこれがいに苦労し、答えを見つからない漠然としたメモリのからt'oldます。

私はサブ分類(*下記参照)で約8枠組みは、オーバーライドを一部の物件に追加し一部の機能をす事ができます。の変更または同一です。ま変更しなくてはならなくなりを通して各クラスと同じ変更あります。つくろうと思いましたが、キーワードなど <IncludeSourcefile "common.vb=""> できたらいいのに入れて各クラスです。

万が一?

(※注)で使える期間のサブ分類がわからない場合は正しい用しています。私も見たことがコ-クリアしますサーに分類は、正しい期間です。

役に立ちましたか?

解決

私は真剣にそれがあなたのために動作するようになるだろう疑います。あなたは派生コントロールに変更をジャムしたファイルを含めることはできません。あなたは、通常、共通の基底クラスでの変更を行いたい、コントロール由来のものは、例えば、その基本クラスから個々のコントロールを導き出します。あなたは8つの別のコントロールクラスをカスタマイズしている場合しかし、それは仕事に行くのではありません。コピーアンドペーストあなたがたくさんある。

他のヒント

これまでのプログラムクレイジアが---

  1. を作成します。vbファイルのコードはあります。
  2. を一部の授業ファイルをそれぞれの規制で追加のサンプルコードです。
  3. をバッチファイルをコピーしてからデータを一般的です。vbお部分の授業
  4. を前ビルステップを実行するとバッチファイルです。

が必要な場合は、コードのコピーの部分の授業の前にコンパイルできずにバッチファイルです。

ることはもちろんこVB.NET の概念の一部。なんたる---。;-D

んを支援 nobugz"の答えです。場合もあり an #Include 決というのはありえないと考える良い方法がありました。変更のインクルードファイルが破損の8サブクラス化ユーザーで制御できます。

:何か の場合 すべてに共通の変化に統合することができるサブクラス化ユーザーコントロール経由でイベントハンドラが設定さ 場合又は の変更のタイプがセット共通性のユーザーコントロールの特定の値はクラスに適用されるコードの変更ユーザー制御に渡されます:

Class CommonChanges

    Private Readonly WithEvents DerivedUserControl As Windows.Forms.Control

    Public Sub New(ByVal derivedUserControl As Windows.Forms.Control)
        Me.DerivedUserControl = derivedUserControl
    End Sub

    Private Sub DerivedUserControl_OnClick(sender As Object, e As EventArgs) _
                Handles DerivedUserControl.Click
        ' ... '
    End Sub

    ...  ' (more event handlers with common code go here) '

End Class

そして、定義するお8カスタマイズユーザーコントロールのように:

Class MyDerivedUserControl
    Extends Button  ' (or whatever control it extends) '

    Private ReadOnly Changes As CommonChanges

    Public Sub New
        Changes = New CommonChanges(Me)
        ' ^ 'CommonChanges' will subscribe to this class's events and possibly
        '   apply other changes to the control object 'Me'.
        ...
    End Sub
End Class

そのオブジェクト Changes タイプ CommonChanges の間はご対応イベントの MyDerivedUserControl クラスとフックのハンドラを定義 CommonChanges します。

また、直接変更の Control オブジェクトが渡されました CommonChanges's"のコンストラクタです。

私は、Microsoftがこのように外部のソースコードを含む許可しない(少なくとも、C#での)特定の設計上の決定をしたこと読んでどこかを覚えています。

これは、ソースファイルを含むことはC ++で有用である可能性がありながら、それはまた複雑さを紹介し、読みやすさを減らすことができると感じました。

オブジェクト指向言語では良い選択肢、最も明白なビーイングオブジェクトの組成と代表団は通常あります。

ここで私は過去にこのような状況を扱ってきた方法は次のとおりです。

class CommonCode
{
    public void HandlePaint(Control c, PaintEventArgs a)
    {
        // Do shared code
    }
    public void HandleResize(Control c)
    {
        // Do shared code
    }

}

class MyButton : Button
{
    private CommonCode m_common=null;

    public MyButton()
    {
        m_common=new CommnCode();        
    }
    protected override OnPaint(PaintEventArgs a)
    {
        m_common.HandlePaint(this,a);
    }

    protected override void OnResize(EventArgs e)
    {
        m_common.HandleResize(this);
    }

}

class MyTextbox :Textbox
{

    private CommonCode m_common=null;

    public MyTextbox()
    {
        m_common=new CommnCode();        
    }
    protected override OnPaint(PaintEventArgs a)
    {
        m_common.HandlePaint(this,a);
    }

    protected override void OnResize(EventArgs e)
    {
        m_common.HandleResize(this);
    }

}

は、独自のDLLにあなたの共通クラスをコンパイルします。

次に、ソリューションエクスプローラでフォルダの参照を右クリックしてVisual StudioでDLLの参照を設定します。

最後に、あなたの新しいDLLに名前空間(S)のためのプロジェクトのクラスにステートメントを使用して追加します。

あなたは、Visual Studioから(出力は、DLLになります)クラスライブラリプロジェクトを作成することができます:

新規プロジェクトの - >クラスライブラリ

あなたはそこにすべてのコードを置くことができ、あなたは単にあなたが(ソリューションエクスプローラ上で右クリックして参照)から、それを使用したいプロジェクトにクラスライブラリへの参照を追加することができます

参照 - > [参照の追加] - >プロジェクト - > MyClassLibrary

それ以外の場合はOUは単にDLL自体に「参照」とポイントを行くことができます。

- 両方のプロジェクトのプロジェクトタブでMyClassLibraryを見つけることができるように

は、同じ溶液中に存在する必要があります。

そして、.vbファイルにあなたは輸入MyClassLibraryを行うことができ、あなたのクラスを使用する必要があります:

// assuming the namespace is MyClassLibrary
imports MyClassLibrary

この時点で、あなたは自分のサブクラスとコントロールを使用することができます。あなたが行く場合MyClassLibrary.のインテリセンスはあなたにすべてのクラスが表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top