我有一个包含用户控件(每个都在单独的程序集中定义)的 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)'。
调用堆栈是:
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() 相同的类中定义的类似静态方法,并且其他方法不会干扰打开表单。
我尝试重建,手动删除所有 3 个项目的内容 obj 和 bin 目录,以及 AppData\Local\Microsoft\VisualStudio\15.0_6d397e1a\ProjectAssemblies 的内容,关闭 VS 2017 中所有打开的文档,关闭解决方案,然后重新启动Visual Studio,它没有任何区别。
我尝试将一个新的(测试)表单添加到同一个项目(包含无法在可视化设计器中打开的表单的项目),并通过从工具箱中拖动它来添加有问题的控件。但是,当放下控件时,会出现一个错误对话框,说
Failed to create component 'Control'.
The error message follows:
'System.MissingMethodException: Method not found CreateCheckBoxColumn(...)
出了什么问题,我该如何解决这个问题而不必注释掉代码以在设计器中打开控件?