2010-12-03 9 views
19

ich hier über Designmode gelernt How to refresh a winform custom control at design time after changing a propertyWinform Custom Control: Designmode nicht true zurück, während im Design-Modus

Aber wenn im Konstruktor meines benutzerdefinierten Steuerelement ich es verwenden, es nie true zurück, so, wenn ich per Drag & Drop Meine benutzerdefinierte Steuerung zeigt immer max = 200 also was ist los?

if (this.DesignMode) 
{     
    this.Min = 0; 
    this.Max = 100; 
} 
else 
{ 
    this.Min = 0; 
    this.Max = 200;    
} 

this.LabMin.Text = this.Min.ToString(); 
this.LabMax.Text = this.Max.ToString(); 
+0

Gibt es einen besonderen Grund, warum der maximale Wert zur Laufzeit höher sein sollte als zur Entwurfszeit? –

+0

Nein, es ist nur um Designmode 2 anderen Wert zu testen :) – user310291

Antwort

34

LicenseManager.UsageMode ist dafür vorgesehen.

Es ist in der Tat die einzige zuverlässige Möglichkeit zu erkennen, ob Ihre Steuerung im Entwurfsmodus ist oder nicht. Es ist nur während des Konstruktors gültig, aber es kann leicht in einem Feld der Klasse für spätere Referenz gespeichert werden.

Die Eigenschaft für verschachtelte Steuerelemente ist falsch, auch wenn das Containersteuerelement im Entwurfsmodus ist.

+4

Danke für den Vorschlag, ich werde versuchen, aber das ist wirklich hässlich von Microsof Ich bin sehr verärgert, geben einen Namen, der doesn Was sein Name vorhat, ist eine Schande. – user310291

+0

Was für ein völlig nutzloses Feld. Danke Microsoft. –

3

Für was ich im Ctor erinnere, hat die DesignMode-Eigenschaft noch nicht ihren Wert. Sie sollten es nach initializeComponents oder in einem Event-Handler verwenden.

+0

+1 Das ist meistens richtig: die 'DesignMode' -Eigenschaft wird immer" False "in einer Konstruktormethode zurückgeben. Ein Aufruf der Methode "InitializeComponents" kann jedoch nicht dazu verwendet werden, dieses Verhalten zuverlässig zu ändern. Sie müssen es in einem Event-Handler (wie vorgeschlagen), einer Eigenschaft oder einer anderen Methode verwenden. –

4

Es könnte sein, dass die Steuerung auch muss muss eine ISite damit verbunden hat, sonst wird es immer wieder zurückkehrt false

Die Design-Modusanzeige in die ISite gespeichert ist; Wenn die Komponente keine ISite hat, die mit verknüpft ist, lautet der Wert dieser Eigenschaft false.

Quelle: MSDN

bearbeiten: Auch diesen Beitrag sehen, wie jemand ein ähnliches Problem mit dem einen hatte bist du

Windows Forms designer and DesignMode property issues

Edit 2 gegenüber: Ich auch Es wurde eine Website gefunden, die darauf hinweist, dass dies ein häufiges Problem bei benutzerdefinierten Steuerelementen ist, aber auch einige Workarounds aufgelistet werden. Sie können es hier finden:

Custom Control Design Mode Problem

+1

Wow danke, aber was für ein hässliches Klempnerei nur um etwas in der Absicht zu machen manchmal ich wirklich hasse Microsoft :) – user310291