Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#.NET 2010中继承用户控件_C#_.net_Winforms - Fatal编程技术网

在C#.NET 2010中继承用户控件

在C#.NET 2010中继承用户控件,c#,.net,winforms,C#,.net,Winforms,我正在使用WinForms在C#.NET 2010中开发一个程序,在将System.windows.Forms.DataVisualization.Charting.Chart类继承到自定义图表中时遇到困难 当我在Visual Studio designer中查看表单时,会出现一个错误,错误是: 找不到类型“ExpeView.ExpeDataChart”。请确保引用了包含此类型的程序集。如果此类型是开发项目的一部分,请确保已使用当前平台或任何CPU的设置成功构建该项目 ExpeDataChart

我正在使用WinForms在C#.NET 2010中开发一个程序,在将System.windows.Forms.DataVisualization.Charting.Chart类继承到自定义图表中时遇到困难

当我在Visual Studio designer中查看表单时,会出现一个错误,错误是:

找不到类型“ExpeView.ExpeDataChart”。请确保引用了包含此类型的程序集。如果此类型是开发项目的一部分,请确保已使用当前平台或任何CPU的设置成功构建该项目

ExpeDataChart.cs文件是这个项目的一部分,每当我编译和运行这个程序时,它都能正常工作。这个错误只出现在designer视图中,使我无法通过GUI编辑表单

ExpeDataChart.cs文件如下所示(这是经过精简的文件,但重点是:

是什么导致它不能在设计器中正确加载,但在编译时仍然正确加载?错误的调用堆栈为:

ExpeView FormExpeView.Designer.cs行:438列:1处 System.ComponentModel.Design.Serialization.CodeDomainSerializationBase.Error(IDesignerSerializationManager 管理器,字符串例外文本,字符串帮助链接)位于 System.ComponentModel.Design.Serialization.CodeDomainSerializerBase.DeserializeExpression(IDesignerSerializationManager 管理器、字符串名称、代码表达式)位于 System.ComponentModel.Design.Serialization.CodeDomainSerializerBase.DeserializeExpression(IDesignerSerializationManager 管理器、字符串名称、代码表达式)位于 System.ComponentModel.Design.Serialization.CodeDomainSerializerBase.DeserializeStatement(IDesignerSerializationManager 代码经理(声明)


将文件ExpeDataChart.cs移动到单独的项目,即库项目。新项目可以是Visual C#解决方案的一部分,也可以是单独的解决方案,例如CustomControls。然后将对库项目的引用添加到使用自定义控件的项目中。现在,您应该能够使用可视化设计器编辑自定义控件。

我试图快速重新创建该问题,但它似乎工作正常。看起来表单的设计器文件中可能有错误。是否尝试从表单中删除控件(在FormExpeView.Designer.cs文件的代码中)?从窗体中删除控件后,重新生成项目,验证是否可以显示窗体的设计器,然后通过设计器再次添加控件。我这样做了,它工作正常。groverboy给了我一个可行的解决方案——将ExpeDataChart.cs与表单放在一个单独的项目中。在一个测试项目中,我将控件添加到与表单相同的项目中,并且设计器工作正常。我想问题是由其他原因引起的(可能是设计器文件中的一些旧代码),更改控件的位置可能会自动解决该问题。使用Visual Studio 2010和WinForms?你们是像我一样扩展图表还是其他控件?有一次,我将ExpediataChart删除为一个重命名的图表,但它仍然不起作用。但是,当我用常规图表代替它时,它确实起了作用。它似乎非常不想使用扩展的ExpeDataChart,直到我将它转移到另一个项目。我通过两种方式实现了这一点(通过添加从图表继承的简单类和添加从图表派生的用户控件)。我可以使用设计器将这两个元素添加到表单中。我使用了VS2010Express和WinForms表单的控制台项目(但我认为这在本例中不会有任何区别)。这是一个必须实现的荒谬解决方案,但这解决了它。谢谢@小狼王-没问题,谢谢你的确认。但为什么可笑呢?可视化设计器使用以前编译过的控件,当然,当自定义控件源代码是当前项目的一部分时,情况就不是这样了。这看起来像是一个任意的跳转。但我认为,由于编译顺序问题,此项目的设计器无法使用此项目中的自定义控件是有道理的。
namespace ExpeView
{
    public class ExpeDataChart : Chart
    {
        public ExpeDataChart()
        {
            MouseMove += SampleMouseMove;
            MouseLeave += SampleMouseLeave;
            MouseDoubleClick += SampleDoubleClick;
            MouseDown += SampleMouseDown;
            MouseUp += SampleMouseUp;
            MouseEnter += SampleMouseEnter;
            MouseLeave += SampleMouseLeave;
            MouseWheel += SampleMouseWheel;
        }

        private void SampleMouseMove(object sender, MouseEventArgs e) { }
        private void SampleMouseLeave(object sender, EventArgs e) { }
        private void SampleDoubleClick(object sender, MouseEventArgs e) { }
        private void SampleMouseDown(object sender, MouseEventArgs e) { }
        private void SampleMouseUp(object sender, MouseEventArgs e) { }
        private void SampleMouseEnter(object sender, EventArgs e) { }
        private void SampleMouseWheel(object sender, MouseEventArgs e) { }
        private void SampleZoomIn(int x) { }
        private void SampleZoomOut() { }
    }
}