41

我有一个 .NET 2.0 windows 窗体应用程序,它大量使用了ListView控件。

我已经将该类子ListView类化为一个模板SortableListView<T>类,因此它可以更智能地显示事物并自行排序。

不幸的是,这似乎破坏了 VS2005 和 2008 中的 Visual Studio Forms Designer。

该程序编译并运行良好,但是当我尝试在设计器中查看拥有表单时,出现以下错误:

  • 找不到类型“MyApp.Controls.SortableListView”。请确保引用了包含此类型的程序集。如果此类型是您的开发项目的一部分,请确保该项目已成功构建。

没有可用于此错误的堆栈跟踪或错误行信息

  • 变量“listViewImages”要么未声明,要么从未分配。

在 MyApp.Main.Designer.cs 行:XYZ 列:1

Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

有问题的代码行是它实际添加到表单的位置,并且是

this.imagesTab.Controls.Add( this.listViewImages );

listViewImages 被声明为

private MyApp.Controls.SortableListView<Image> listViewImages;

并在方法中实例化InitializeComponent如下:

this.listViewImages = new MyApp.Controls.SortableListView<Image>();

如前所述,程序编译和运行完美,我尝试将SortableListView类移出单独的程序集,以便可以单独编译,但这没有什么区别。

我不知道从这里去哪里。任何帮助,将不胜感激!

4

11 回答 11

41

由于 x86 / x64 架构,它发生在我身上。

由于 Visual Studio(开发工具本身)没有 x64 版本,因此无法将 x64 控件加载到 GUI 设计器中。

最好的方法可能是在 x86 下调整 GUI,并在必要时为 x64 编译它。

于 2015-11-18T03:57:57.490 回答
9

添加列表视图时,是否将其添加到工具箱中,然后将其添加到表单中?

不,我只是编辑Main.Designer.cs并将其System.Windows.Forms.ListViewMyApp.Controls.SortableListView<Image>

怀疑这可能是由于泛型导致我真正找到了解决方案。

对于我需要为其创建 SortableListView 的每个类,我定义了一个像这样的“存根类”

class ImagesListView : SortableListView<Image> { }

然后使Main.Designer.cs文件引用这些存根类而不是SortableListView.

它现在有效,万岁!

值得庆幸的是,我能够做到这一点,因为我的所有类型都是预先知道的,而且我只是将SortableListView用作减少重复代码的一种方法。

于 2008-08-13T01:23:58.633 回答
6

过去我遇到过这样的问题(虽然不一样),我的控件与我的表单位于不同的命名空间中,即使它位于同一个项目中。要修复它,我必须添加一个

using My.Other.Namespace;

到设计器生成的代码文件的顶部。令人讨厌的是,当设计师重新生成页面时,它一直被吹走。

于 2008-08-12T23:33:06.670 回答
6

我也遇到了这个问题,与在 *.Designer.cs 文件中合并大量 SVN 更改(有冲突)有关。解决方案是仅以图形方式打开设计视图,编辑控件(将其向左然后向右移动)并重新保存设计。*.Designer.cs 文件神奇地改变了,警告在下一次编译时消失了。

需要明确的是,您需要首先修复所有代码合并问题。这只是强制 VS 重新加载它们的解决方法。

于 2012-08-30T23:15:52.733 回答
2

包含 MyApp.Controls.SortableListView 的程序集没有安装在 GAC 中,是吗?

于 2008-08-13T00:22:44.417 回答
2

添加列表视图时,是否将其添加到工具箱中,然后将其添加到表单中?

于 2008-08-13T01:07:15.857 回答
2

也许你忘了补充:

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Release all resources used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        // ...
        this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use
        // ...
    }
于 2012-07-31T21:02:30.597 回答
2

我曾经也有过一样的问题。删除我自己对 *.Designer.cs-File 的一些控件后,问题就解决了。回到原始代码后,问题仍然得到解决。所以这似乎是Visual Sudio缓存的问题。目前我无法重现此问题。

如果您有问题,请尝试清空文件夹

C:\Users\YOURNAME\AppData\Local\Microsoft\VisualStudio\VERSION\Designer\ShadowCache

它奏效了吗?

于 2017-02-03T08:41:03.087 回答
1

我有类似的东西 - 用户控件指的是远程服务(我不能保证在设计时可用)。

MSDN 上的这篇文章建议我添加

if (this.DesignMode) return;

到控件的加载功能,或者在我的情况下到初始化 WCF 客户端之前的点。那成功了。

所以

private readonly Client _client = new Client();

变成

private Client _client;

public new void Load()
{
    if(DesignMode) return;
    _client = new Client();
}
于 2009-08-18T10:52:14.873 回答
1

我遇到过同样的问题。在我的情况下,这个问题是由于资源初始化造成的。我将以下代码从InitializeComponent方法移动到 ctor(调用后InitializeComponent)。之后,此问题得到解决:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));
于 2013-11-19T11:48:09.927 回答
-3

就我而言,问题是我项目的文件夹名称!为什么我这么认为:我使用 SVN 并且在 'trunk\SGIMovel' 中完美运行。但是在名为“OS#125\SGIMovel”的分支文件夹中,我无法打开使用自定义控件并在主干文件夹中工作的表单的设计器。

只需下车 # 并且效果很好。

于 2013-10-17T13:59:44.847 回答