2009-04-14 11 views
1

私は実際にこのことについて私の理解の限界にあるので、私はこれを説明しなければ、あまりにも申し訳ありません...ASP.Netサーバーコントロールの複合 "プロパティ"

とにかくintellisenseを使用して設定できる複雑なプロパティを持つasp.netサーバーコントロールを作成しようとしています。だから、サーバーコントロールが車と呼ばれるかもしれないので、私は実際に私が例えばので、複雑な階層のプロパティを設定したいWebフォーム上のコントロールを実装する場合の例として、私は、車を使用します。

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

または

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

私はサーバーコントロールで、基本クラスを指し示す型/クラスであるがintellisenseは何も出てこないpublicプロパティを作成しようとしました。私はまっすぐ前方enumを使用することができ、それが表示されますが、私は階層的に何もすることはできません。私は例を探していましたが、何かを見つけることができません。どんな助けでも大いに感謝されるでしょう!!!!

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

完全に重要ではありませんが、項目とその意図した値の間の関係が問題であるように見えますが、異なる例を考えてみましょう。

...さんは私のカスタムサーバーコントロールは、「場所」と呼ばれているならば、私のことができるようにしたいと思い、この例では....大陸/国/州/市の/ etc間の関係を見てみましょう
<Control:Location CurrentLocation="UnitedStates.Nebraska.Lincoln" /> 

または

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

答えて

0

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

namespace Paint 
{ 
    public enum Metalic 
    { 
     CandyRed 
    } 

    public enum Matte 
    { 
     Yellow 
    } 
} 

許可されていますが、文書化しやすく理解しやすいです。

+0

私はそれが仕事だと思うが、どのように私はプロパティを公開しますペイントが名前空間の場合は、ペイントタイプですか? – Blaxer

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; } 
     } 
    } 
} 
+0

これは私が必要ですが、この例ではネームスペースレベルのプロパティとしてどのように公開するのですか?Webフォームでコントロールを使用しているときにintellisenseを表示したい場合はpaint = "Metalic.CandyRed"を表示し、利用可能なすべての "選択肢"を表示する – Blaxer

+0

@Blaxer - 名前空間に入れて、.aspxの名前空間をインポートする必要があります。 –

9

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

「Paint.Metalic.CandyRed」のようなものはどこに見たことがありますか?それはどういう意味ですか?または "Forged.Aluminun.FiveSpoke.GunMetal"?あなたはそれが意味することを何にしたいのですか?

まず、表現したいものを見つけてください。次に、それを表すクラスを作成します。次に、そのクラスのプロパティをサーバーコントロールに追加します。 ASP.NETが好みのテキスト表現をクラスのインスタンスに変換するには、TypeConverterまたは他のデザイナーサポートを追加する必要があります。そうしないと、Fontのプロパティのようなものを得ることができます。


私はこれらの値のいくつかが何を表しているのかを推測し、それらをコントロールで処理する方法を示します。しかし、私の推測ははるかに離れている可能性があります。

「Paint.Metalic.CandyRed」で作業します。これは自動車のカスタマイズ領域に当てはまると仮定し、Colorプロパティは車全体に与えられたフィニッシュを表すことを意図していると仮定します。その場合、「ペイント」は仕上げの種類を示すenum(おそらく、他の種類の仕上げが車に適用されるかどうかわかりませんが)でしょう。絵の具が金属、光沢、フラットな子供の時にモデルカーを作ることから、3つの列挙型の列挙型の値が得られることが分かりました。 「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> 
+0

私はそれが役に立ちそうです。申し訳ありません、今日は最高の気分ではありません。次の数時間ほど鈍いと思われる。 ;-) –

+0

ミッチェルとトムが間違っていたと思いますか?彼らの答えは理にかなったが、私はそれを完全に理解するためにはもっと詳細が必要だ。 – Blaxer

+0

「Forged.Steel.SevenSpoke.BareMetal」のようなものを実際には考えていないように見えます。その材料+外観+仕上げですか?彼らは文法の問題があると思っていました。私はあなたが作業するための概念上の問題があると思います。 –

関連する問題