2010-11-24 4 views
4

Ich habe ein Tab-Steuerelement, das 4 Registerkarten hat. Jede Registerkarte enthält ein Benutzersteuerelement, das ich beim Laden des Programms programmgesteuert hinzufüge. Aus irgendeinem Grund lädt die zweite Registerkarte langsam, wenn ich darauf klicke, aber die anderen Registerkarten laden sich gut. Diese Registerkarte enthält ungefähr 20 Steuerelemente (Textfelder, Dropdownlisten, Listenfelder usw.), aber keine Bilder oder ähnliches. Auch diese Seite hat ungefähr die gleiche Anzahl von Steuerelementen wie die anderen. Gibt es eine Möglichkeit, das Wechseln der Tabs zu beschleunigen? Kann ich die Registerkarte beim Start vorab laden?Windows Form Tabulator lädt langsam

Hinweis: Es ist nur langsam auf den ersten Schalter. Diese

ist, wie ich die Usercontrol hinzufügen

tabPage2.Controls.Add(userControl_1); 
     // 
     // userControl_1 
     // 
     userControl_1.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom) 
            | AnchorStyles.Left) 
           | AnchorStyles.Right; 
     userControl_1.Location = new System.Drawing.Point(0, 0); 
     userControl_1.Name = "userControl_1"; 
     userControl_1.Size = new System.Drawing.Size(878, 646); 
     userControl_1.TabIndex = 0; 
+0

Haben Sie 'userControl_1.Dock = Dockstyle.Fill 'anstelle all dieser Einstellungen für Größe und Anker versucht? –

+0

Versucht, aber es hat nicht die Kontrolle korrekt am unteren Rand, auch nicht die Langsamkeit behoben. – Gage

+0

Es ist fast * nie * das 'Laden', das langsam ist (es sei denn, Datenverbindung), es ist die * Malerei *, die es langsam aussehen lässt. –

Antwort

1

Dies ist ein Merkmal der TabControl: Der Inhalt einer Registerkarte wird nur dann geladen, wenn sie zum ersten Mal angeklickt werden.

Es wäre daher ein Problem dieser UC auf der 2. Registerkarte, suchen Sie nach den Ressourcen (Abfragen), die es verwendet.

+0

Das ist die Sache aber, ich benutze Nhibernate und wenn ich auf die Registerkarte klicken, zeigt es keine Abfragen in Nhibernate Profiler ausgeführt wird. – Gage

+0

Dann suchen Sie nach etwas anderem, das es verlangsamen könnte. –

+0

Ich habe nach allem Ausschau gehalten, was ich mir vorstellen kann, darum frage ich hier. Gibt es keine Möglichkeit, die Ihnen bekannte Registerkarte vorab zu laden? – Gage

1

Rufen Sie SuspendLayout und ResumeLayout vor und nach dem Laden aller Controls.

Wie so

UserControlName.SuspendLayout(); 

//Load all of the controls 

UserControlName.ResumeLayout(); 

Dies bewirkt, dass es nichts zu ziehen, bis es alle Steuerelemente initialisiert hat Sie zu laden versuchen.

+0

Ja bin ich eigentlich. Ich habe es auskommentiert, aber es gibt immer noch eine Verzögerung zwischen dem Klick auf den Tab und der Anzeige. 3-4 s. Könnte das eine LINQ-Sache sein? Es zeigt, dass beim Start alles geladen wird. Kann LINQ so verzögern? – Gage

+0

@Gage ja, das ist einer der Hauptpunkte von LINQ. Es wird nichts geladen, bis Sie tatsächlich auf die Daten in der Abfrage zugreifen – msarchet