2

グラフ作成インターフェイスを作成していますが、シリーズの色、BackColor、データ ポイントのサイズなど、グラフの外観を編集するオプションをユーザーに提供したいと考えています。

System.Windows.Forms.DataVisualization.Charting

ユーザーがこれらのオプションを編集できるようにするために、フォームに PropertyGrid を配置しました。ただし、ユーザーにアクセスさせたくないプロパティがいくつかあります。フォームにグラフを設定し、そのグラフに接続されているが、グリッドから特定のプロパティが削除されているプロパティ グリッドを作成できるようにしたいと考えています。私がこれまでに試したことは...

public partial class Form1: Form 
{
    PropertyGrid propG1 = new PropertyGrid();
    this.Controls.Add(propG1);

    //... There is code here where my chart(chart1) is being populated with data 
    private void toolStripButton1_Click(object sender, EventArgs e)// The button is just to test 
    MyChart myC = new MyChart(); 
    propG1.SelectedObject = myC; 
}

これまでに受け取った推奨事項に基づいて、チャートに表示したくないプロパティを含む MyChart というクラスを作成しました。

using System.ComponentModel
//...

public class MyChart : Chart 
{
    [Browsable(false)]
    public new System.Drawing.Color Property
    {
        get{return BackColor;}  // BackColor is just an example not necessarily a property I'd like to remove
        set{base.BackColor = value;}
    }

グリッドからプロパティを削除することも、myC を chart1 に接続することもできなかったため、グリッド chart1 でプロパティが変更されると影響を受けます。いつもお世話になっております。

4

1 に答える 1

2

PropertyGrid コンポーネントとその動作を変更する代わりに、属性で表示するオブジェクトを変更できます。このようなもの:

[Browsable(false)]
public object SomeProperty
{
}

追加することを忘れないでください:

using System.ComponentModel;

継承されたプロパティをオーバーライドして、propertyGrid から非表示にするには、次のようにします。

public class Chart : BaseChart
{
    [Browsable(false)]
    public new string BaseString // notice the new keyword!
    {
        get { return base.BaseString; } // notice the base keyword!
        set { base.BaseString = value; }
    }

    // etc.
}

public class BaseChart
{
    public string BaseString { get; set; }
}

Browsable 属性を false に設定すると、SomeProperty が PropertyGrid に表示されなくなります。

したがって、以下のような架空のチャート クラスでは、チャート インスタンスの SomeProperty1 プロパティが表示されますが、SomeProperty2 は表示されません。

public class Chart
{
    public object Property1 { get; set; }

    [Browsable(false)]
    public object Property2 { get; set; }

    // etc.
}

詳細については、プロパティ グリッドを最大限に活用するを参照してください。ここでは、PropertyGrid コントロールのカスタマイズについて非常に深く掘り下げて説明しています。;-)

さらに、属性と PropertyGrid を使用するとさらに楽しくなります。

[DefaultPropertyAttribute("Property1")]
public class Chart
{
    [CategoryAttribute("My Properties"),
     DescriptionAttribute("My demo property int"),
     DefaultValueAttribute(10)]
    public int Property1 { get; set; }

    [Browsable(false)]
    public object Property2 { get; set; }

    [CategoryAttribute("My Properties"),
     DescriptionAttribute("My demo property string"),
     DefaultValueAttribute("Hello World!")]
    public string Property3 { get; set; }

    // etc.
}
于 2013-02-25T20:21:36.240 に答える