Domanda

Ho un'app Windows Form .NET 2.0, che fa un uso intensivo di ListView controllo.

Ho sottoclassato il ListView classe in un modello SortableListView<T> class, quindi può essere un po' più intelligente nel modo in cui visualizza le cose e ordina se stessa.

Sfortunatamente questo sembra danneggiare Visual Studio Forms Designer, sia in VS2005 che in 2008.

Il programma viene compilato e funziona correttamente, ma quando provo a visualizzare il modulo proprietario nel designer, ottengo questi errori:

  • Impossibile trovare il tipo "MyApp.Controls.SortableListView".Assicurarsi che venga fatto riferimento all'assembly che contiene questo tipo.Se questo tipo fa parte del tuo progetto di sviluppo, assicurati che il progetto sia stato creato con successo.

Per questo errore non sono disponibili informazioni sull'analisi dello stack o sulla riga di errore

  • La variabile "listViewImages" non è dichiarata o non è mai stata assegnata.

In MyApp.Main.Designer.cs Riga:XYZ Colonna: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) 

La riga di codice in questione è dove viene effettivamente aggiunta al modulo, ed è così

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

listViewImages è dichiarato come

private MyApp.Controls.SortableListView<Image> listViewImages;

ed è istanziato in InitializeComponent metodo come segue:

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

Come accennato in precedenza, il programma si compila e funziona perfettamente e ho provato a spostare il file SortableListView class in un assembly separato in modo che possa essere compilato separatamente, ma questo non fa differenza.

Non ho idea di dove andare da qui.Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione 3

quando hai aggiunto la visualizzazione elenco, l'hai aggiunta alla casella degli strumenti e poi al modulo?

No, ho appena modificato Main.Designer.cs e l'ho cambiato da System.Windows.Forms.ListView A MyApp.Controls.SortableListView<Image>

Il sospetto che potesse essere dovuto ai farmaci generici mi ha portato a trovare effettivamente una soluzione.

Per ogni classe per la quale devo creare un SortableListView, ho definito una "classe stub" come questa

class ImagesListView : SortableListView<Image> { }

Poi ha fatto il Main.Designer.cs si riferiscono a queste classi stub invece che a SortableListView.

Ora funziona, evviva!

Per fortuna sono in grado di farlo perché tutti i miei tipi sono conosciuti in anticipo e sto usando solo il file SortableListView come metodo per ridurre il codice duplicato.

Altri suggerimenti

A me è successo a causa dell'architettura x86/x64.

Poiché Visual Studio (lo strumento di sviluppo stesso) non dispone di una versione x64, non è possibile caricare il controllo x64 nel GUI Designer.

L'approccio migliore per questo potrebbe essere l'ottimizzazione della GUI su x86 e compilarla per x64 quando necessario.

Ho avuto un problema come questo (anche se non lo stesso) in passato in cui il mio controllo si trovava in uno spazio dei nomi diverso rispetto al mio modulo anche se era nello stesso progetto.Per risolverlo ho dovuto aggiungere a

using My.Other.Namespace;

all'inizio del file di codice generato dal designer.La cosa fastidiosa era che continuava a venire spazzato via quando il designer rigenerava la pagina.

Anch'io ho avuto questo problema, relativo all'unione di enormi modifiche SVN (con conflitti) nel file *.Designer.cs.La soluzione era semplicemente aprire graficamente la visualizzazione del disegno, modificare un controllo (spostarlo a sinistra e poi a destra) e salvare nuovamente il disegno.Il file *.Designer.cs è magicamente cambiato e l'avviso è scomparso alla successiva compilazione.

Per essere chiari, devi prima risolvere tutti i problemi di unione del codice.Questa è solo una soluzione per forzare VS a ricaricarli.

Per caso l'assembly che contiene MyApp.Controls.SortableListView non è installato nel GAC, vero?

quando hai aggiunto la visualizzazione elenco, l'hai aggiunta alla casella degli strumenti e poi al modulo?

Forse hai dimenticato di aggiungere che:

    /// <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
        // ...
    }

Avevo qualcosa di simile: un controllo utente si riferiva a un servizio remoto (che non potevo garantire fosse disponibile in fase di progettazione).

Questo post su MSDN mi ha suggerito di aggiungere

if (this.DesignMode) return;

alla funzione Carica del controllo o, nel mio caso, al punto precedente all'inizializzazione del client WCF.Questo ha funzionato.

COSÌ

private readonly Client _client = new Client();

diventa

private Client _client;

public new void Load()
{
    if(DesignMode) return;
    _client = new Client();
}

Ho avuto lo stesso problema.Nel mio caso questo problema era dovuto all'inizializzazione delle risorse.Ho spostato il seguente codice da InitializeComponent metodo per ctor(Dopo aver chiamato InitializeComponent).Successivamente questo problema è stato risolto:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));

Ho avuto lo stesso problemaDopo aver rimosso alcuni dei miei controlli del file *.Designer.cs, il problema è stato risolto.Dopo essere tornati al codice originale, il problema è stato comunque risolto.Quindi sembra essere un problema con la cache di Visual Sudio.Al momento non riesco a riprodurre questo problema.

Se riscontri problemi prova a svuotare la cartella

C:\Users UONOME\AppData\Local\Microsoft\VisualStudio\VERSIONE\Designer\ShadowCache

Ha funzionato?

Nel mio caso il problema era il nome della cartella del mio progetto!Perché penso questo:Io uso SVN e nel 'trunk\SGIMovel' funziona perfettamente.Ma in una cartella di ramo denominata "OS#125\SGIMovel" non riesco ad aprire la finestra di progettazione per un modulo che utilizza un controllo personalizzato e funziona nella cartella trunk.

Scendi dal # e funziona bene.

Grazie per niente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top