Visual c#停止自定义控件的代码生成

本文关键字:代码生成 自定义控件 Visual | 更新日期: 2023-09-27 18:06:10

希望我能得到一些帮助与我的问题,可能是一个简单的解决方案。我试图创建一个自定义图表控件(从图表类继承)。在构造函数中,我添加了一个ChartArea和Legend。当我将控件添加到表单时一切正常,但是当我运行它时,我在表单设计器中得到一个错误,说已经存在一个图表区域,其名称与我在构造函数中添加的名称相同。所以我的问题是,图表区域试图在表单设计器生成的代码中添加第二次。我可以从生成的代码中删除它,但我想看看是否有一种更简单的方法来控制它在我的自定义图表类。图表的构造函数代码为:

    public MultiFunctionalGraph(DataForGraph dataA, DataForGraph dataB, DataForGraph dataC, DataForGraph dataD)
    {
        this.dataA = dataA;
        this.dataB = dataB;
        this.dataC = dataC;
        this.dataD = dataD;
        ChartArea chartArea = new ChartArea();
        Legend legend = new Legend();
        Axis xAxis = new Axis(chartArea, AxisName.X);
        Axis yAxis = new Axis(chartArea, AxisName.Y);
        chartArea.Name = "ChartArea";
        chartArea.Visible = true;
        this.ChartAreas.Add(chartArea);
        legend.Name = "Legend";
        this.Legends.Add(legend);
    }

我在设计器的代码生成中得到这个:

        this.Graph1 = Graph();
        ((System.ComponentModel.ISupportInitialize)(this.Graph1)).BeginInit();
        // Graph1
        // 
        this.Graph1.BackColor = System.Drawing.Color.Transparent;
        chartArea1.AxisX.Interval = 5D;
        chartArea1.AxisX.MajorGrid.Interval = 10D;
        chartArea1.AxisX.MajorTickMark.Interval = 5D;
        chartArea1.AxisY.LabelStyle.Interval = 500D;
        chartArea1.AxisY.MajorGrid.Interval = 500D;
        chartArea1.AxisY.MajorTickMark.Interval = 500D;
        chartArea1.AxisY.MinorGrid.Interval = 500D;
        chartArea1.AxisY.MinorTickMark.Interval = 500D;
        chartArea1.CursorX.LineColor = System.Drawing.Color.LimeGreen;
        chartArea1.CursorX.LineWidth = 2;
        chartArea1.CursorY.LineColor = System.Drawing.Color.LimeGreen;
        chartArea1.CursorY.LineWidth = 2;
        chartArea1.Name = "ChartArea";
        this.Graph1.ChartAreas.Add(chartArea1);
        legend1.AutoFitMinFontSize = 5;
        legend1.Name = "Legend";
        legend1.TextWrapThreshold = 20;
        this.Graph1.Legends.Add(legend1);
        this.Graph1.Location = new System.Drawing.Point(46, 302);
        this.Graph1.Name = "Graph1";
        this.Graph1.Size = new System.Drawing.Size(569, 300);
        this.Graph1.TabIndex = 7;
        this.Graph1.Text = "Graph1";
所以基本上我必须停止生成代码来在设计器中添加图表区域。我想我可以得到它使用DesignerSerialize属性,但我真的可以使用一些帮助。谢谢你!

Visual c#停止自定义控件的代码生成

在图形设计器中,打开Chart上的ChartAreas集合属性,并删除当前存在的任何内容。

ETA:你也可以通过编程来完成,在InitializeComponent方法被调用后的构造函数中:

public MyChartClass()
{
    InitializeComponent();
    ChartAreas.Clear();
    ChartAreas.Add("ChartArea");
}

我用一种迂回的方法解决了这个问题。我没有扩展Chart控件,而是扩展了UserControl类,并在其中添加了一个图表对象。现在我可以更容易地控制它,少了麻烦。谢谢大家的帮助!