5

これが何と呼ばれているのかわからないので、グーグルから答えを見つけるのに苦労しましたが、昔から漠然とした記憶があります。

約 8 つのフレームワーク コントロールをサブクラス化し (* 以下を参照)、いくつかのプロパティをオーバーライドし、それぞれにいくつかの機能を追加しました。私が行った変更は、すべての場合で同じです。変更を加える場合は、各クラスを調べて同じ変更を適用する必要があります。各クラスに入れることができる<IncludeSourcefile "common.vb>などのキーワードがあることを期待していました。

チャンスはありますか?

(*注)サブクラスという言葉を使っていますが、それが正しい用語かどうかはわかりません。また、コールバックに使用されることも見てきました。サブクラス化は正しい用語ですか?

4

5 に答える 5

1

これはばかげた考えかもしれませんが...

  1. 必要なコードを含む common.vb ファイルを作成します。
  2. サンプル コードを追加する各コントロールの部分クラス ファイルを作成します。
  3. common.vb から部分クラスにデータをコピーするバッチ ファイルを作成します。
  4. そのバッチ ファイルを実行するビルド前のステップを作成します。

コンパイルの前にコードを部分クラスにコピーする必要がある場合は、いつでもバッチ ファイルを実行できます。

もちろん、これは VB.NET に部分クラスの概念があることを前提としています。いいえ、家では試していません... ;-D

于 2010-01-26T00:32:48.587 に答える
1

私はそれがあなたのためにうまくいくと真剣に疑っています。インクルード ファイルを使用して、変更を派生コントロールに詰め込むことはできません。通常は、たとえば Control から派生した共通の基本クラスで変更を行い、その基本クラスから個々のコントロールを派生させます。しかし、8 つの個別のコントロール クラスをカスタマイズした場合、それは機能しません。コピー&ペーストはあなた次第です。

于 2010-01-26T00:17:43.717 に答える
1

Microsoft が (少なくとも C# では) この方法で外部ソース コードを含めることを許可しないという特定の設計上の決定を行ったことをどこかで読んだことを覚えています。

ソース ファイルを含めることは C++ で役立つ可能性がありますが、複雑さが増し、読みやすさが低下する可能性があると感じられました。

OO 言語には通常、適切な代替手段があります。最も明白なのは、オブジェクトの構成と委譲です。

過去にこの状況に対処した方法は次のとおりです。

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);
    }

}
于 2010-01-26T03:12:56.127 に答える
0

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

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

最後に、新しい DLL の名前空間のプロジェクトのクラスに Using ステートメントを追加します。

于 2010-01-26T00:16:36.620 に答える
0

Visual Studio からクラス ライブラリ プロジェクト (出力は dll) を作成できます。

新しいプロジェクト --> クラス ライブラリ

そこにすべてのコードを配置してから、クラス ライブラリへの参照を、それを使用するプロジェクトに追加するだけです (ソリューション エクスプローラーで参照を右クリックします)。

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

[プロジェクト] タブで MyClassLibrary を見つけるには、両方のプロジェクトが同じソリューション内にある必要があります。そうでない場合は、「参照」して dll 自体を指定するだけです。

次に、クラスを使用する必要がある .vb ファイルで、インポート MyClassLibrary を実行できます。

// assuming the namespace is MyClassLibrary
imports MyClassLibrary

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

于 2010-01-26T00:18:25.357 に答える