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

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

*.Designer.cs ファイルで大規模な SVN 変更 (競合あり) をマージすることに関連して、この問題もありました。解決策は、デザイン ビューをグラフィカルに開き、コントロールを編集 (左に移動してから右に移動) し、デザインを再保存することでした。*.Designer.cs ファイルが魔法のように変更され、次のコンパイルで警告が消えました。

明確にするために、最初にすべてのコード マージの問題を修正する必要があります。これは、VS にそれらを強制的にリロードさせるための単なる回避策です。

于 2012-08-30T23:15:52.733 に答える
6

過去に、同じプロジェクトにあったとしても、コントロールがフォームとは異なる名前空間にあったというこのような問題がありました(同じではありません)。それを修正するには、追加する必要がありました

using My.Other.Namespace;

デザイナーが生成したコード ファイルの先頭に追加します。面倒だったのは、デザイナーがページを再生成したときに、吹き飛ばされ続けたことです。

于 2008-08-12T23:33:06.670 に答える
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

MyApp.Controls.SortableListView を含むアセンブリが GAC にインストールされていません。

于 2008-08-13T00:22:44.417 に答える
2

リストビューを追加したとき、それをツールボックスに追加してからフォームに追加しましたか?

于 2008-08-13T01:07:15.857 に答える
1

私は似たようなものを持っていました-ユーザーコントロールはリモートサービスを参照していました(設計時に利用できることを保証できませんでした)。

MSDN のこの投稿は、追加することを提案しました

if (this.DesignMode) return;

コントロールの Load 関数に、または私の場合は 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 に答える
-3

私の場合、問題はプロジェクトのフォルダー名でした! なぜ私はこれを考える: 私は SVN を使用し、'trunk\SGIMovel' で完全に動作します。しかし、「OS#125\SGIMovel」という名前のブランチ フォルダーでは、カスタム コントロールを使用し、トランク フォルダーで動作するフォームのデザイナーを開くことができません。

# を外すだけでうまくいきます。

于 2013-10-17T13:59:44.847 に答える