1

申し訳ございませんが、ご理解のほどよろしくお願い申し上げます。

とにかく、インテリセンスを使用して設定できる複雑なプロパティを持つasp.netサーバーコントロールを作成しようとしています。例としてcarsを使用するので、サーバーコントロールはcarと呼ばれる場合があり、実際にWebフォームにコントロールを実装するときに、複雑な階層プロパティを設定します。たとえば、次のようになります。

<Control:Car Color="Paint.Metalic.CandyRed" 
             Wheels="Forged.Aluminun.FiveSpoke.GunMetal" />

また

<Control:Car Color="Paint.Matte.Yellow"
             Wheels="Forged.Steel.SevenSpoke.BareMetal" />

サーバーコントロールに、基本クラスを指すタイプ/クラスであるパブリックプロパティを作成しようとしましたが、インテリセンスは何も作成しません。単純な列挙型を使用でき、それが表示されますが、そのように階層的なことはできません。例を探していましたが、何も見つからないようです。どんな助けでも大歓迎です!!!!

ありがとうございました!

アイテム間の関係や意図された価値は完全に重要ではないものの、問題のように思われるので、別の例はどうでしょうか。

大陸/国/州/都市などの関係を考えてみましょう。この例では、カスタムサーバーコントロールが「場所」と呼ばれている場合、次のことができるようになります...

<Control:Location CurrentLocation="UnitedStates.Nebraska.Lincoln" />

また

<Control:Location CurrentLocation="Europe.Italy.Napoli" />
4

3 に答える 3

9

あなたの問題は、前の 2 つの回答が示唆するよりも悪いです。自分が何をしているのかわかりません。

耳障りに聞こえて申し訳ありませんが、「Paint.Metalic.CandyRed」のようなものをどこで見たことがありますか?そこではどういう意味でしたか? それとも「Forged.Aluminun.FiveSpoke.GunMetal」?あなたはそれが何を意味したいのですか?

まず、何を表現したいのかを考えます。次に、それを表現できるクラスを作成します。次に、そのクラスのプロパティをサーバー コントロールに追加します。ASP.NET で好みのテキスト表現をクラスのインスタンスに変換するには、TypeConverter またはその他のデザイナー サポートを追加する必要がある場合があります。それ以外の場合は、Font のプロパティのようなものを取得できます。


これらの値のいくつかが何を表しているかを推測し、コントロールでそれらを処理する方法を示します。しかし、私の推測は遠いかもしれません。

「Paint.Metalic.CandyRed」で作業します。これは自動車のカスタマイズの領域に当てはまり、Color プロパティは自動車全体の仕上げを表すものであると仮定します。その場合、「ペイント」はおそらくenum仕上げの種類を指しているでしょう(ただし、車に他の種類の仕上げが適用されるかはわかりません!)。子供の頃に模型の車を作っていたので、塗料はメタリック、光沢、またはフラットである可能性があることを知っているので、これら 3 つは 1 つの列挙値の列挙値になります。「CandyRed」は多くの色の 1 つです。これにより、次のような結果が得られます。

public enum FinishType
{
    Paint,
    NotPaint // _I_ don't know!
}

public enum PaintFinish
{
    Metallic,
    Gloss,
    Flat
}

public enum CarColor
{
    CandyRed,
    SilverMist,
    DesertSandMica,
    MagneticGray,
    // etc.
}


public class CarFinish
{
    public FinishType FinishType {get;set;}
    public PaintFinish PaintFinish {get;set;}
    public CarColor CarColor {get;set;}
}

public class Car : WebControl
{
    public CarFinish Color {get;set;}
}

これにより、次のようなことが可能になります。

<Control:Car Color-FinishType="Paint"
             Color-PaintFinish="Metallic"
             Color-CarColor="CandyRed" .../>

またはこれ:

<Control:Car ...>
    <Color FinishType="Paint" PaintFinish="Metallic" CarColor="CandyRed"/>
</Control:Car>
于 2009-04-14T23:00:49.903 に答える
0

これらのアイテムは列挙型である必要があります。これが、少なくとも私が見たすべてのものでサポートされている唯一の方法だからです。これで、いくつかの列挙型で目的を達成できます。

namespace Paint
{
    public enum Metalic
    {
        CandyRed
    }

    public enum Matte
    {
        Yellow
    }
}

確かに、完璧ではありませんが、文書化して理解するのは簡単です!

于 2009-04-14T22:29:14.893 に答える
0

Mitchel Sellers が投稿したように、Enum または Constants/Statics のいずれかである必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Paint
{
    public class Metallic
    {
        public static Color CandyRed
        {
            get { return Color.Red; }
        }

        public static Color CandyGreen
        {
            get { return Color.Green; }
        }
    }

    public class Matte
    {
        public static Color Red
        {
            get { return Color.Red; }
        }

        public static Color Green
        {
            get { return Color.Green; }
        }
    }
}
于 2009-04-14T22:34:04.540 に答える