我有一个包含用户控件的Windows窗体(每个窗口都在不同的程序集中定义)。该控件调用工厂方法(在另一个程序集中定义)来创建DataGridView CheckBox列:
datagridview.Columns.Add(DataGridViewUtilities.CreateCheckBoxColumn("Selected", false));
代码编译并运行正常,可以在Visual Studio 2017 Designer中打开控件。
但是,如果我尝试在VS 2017 Designer中打开包含表单,我会收到以下错误:
找不到方法:'System.Windows.Forms.DataGridViewCheckBoxColumn DataGridViewUtilities.CreateCheckBoxColumn(System.String,Boolean, System.String,Boolean, System.Windows.Forms.DataGridViewAutoSizeColumnMode, System.Windows.Forms.DataGridViewColumnSortMode,Int32)'。
callstack是:
at Control.SetupColumns(DataGridView grid)
at Control..ctor() in ...\Control.cs:line ##
注释掉调用CreateCheckBoxColumn()的行可以在VS Designer中正确打开包含的表单。
CreateCheckBoxColumn()声明为:
static public DataGridViewCheckBoxColumn CreateCheckBoxColumn(string dataPropertyName, bool readOnly = true, string columnName = null, bool threeState = false, DataGridViewAutoSizeColumnMode autosizeMode = DataGridViewAutoSizeColumnMode.None, DataGridViewColumnSortMode sortMode = DataGridViewColumnSortMode.Automatic, int width = 35)
{
...
}
一个奇怪的事情是控件调用与CreateCheckBoxColumn()在同一个类中定义的类似静态方法,而其他方法不会干扰打开表单。
我尝试重建,手动删除内容obj&amp;所有3个项目的bin目录,以及AppData \ Local \ Microsoft \ VisualStudio \ 15.0_6d397e1a \ ProjectAssemblies的内容,关闭VS 2017中的所有打开文档,关闭解决方案,然后重新启动Visual Studio,它没有任何区别。< / p>
我尝试将新的(测试)表单添加到同一个项目(包含无法在Visual Designer中打开的表单的项目),并通过从工具箱中拖动它来添加违规控件。但是当放下控件时会出现错误对话框
Failed to create component 'Control'.
The error message follows:
'System.MissingMethodException: Method not found CreateCheckBoxColumn(...)
出了什么问题,如何解决这个问题,而无需注释掉代码来打开设计师的控件?