Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1550 | Anzahl registrierter User: 1841 | Besucher online: 49
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

.DesignMode Workaround (Windows Forms)


Autor: Horego
Sprache: C#
Bewertung:
6.54 (3 votes)
Anzahl der Aufrufe: 10103
  
Kick it on dotnet-kicks.de  

Beschreibung:

Workaround für die .DesignMode Eigenschaft in Visual Studio 2003,2005

Die Eigenschaft .DesignMode eines Controls,
welches die ISite Schnittstelle implementiert gibt zurück, ob sich das Control im DesignMode befindet.

Sobald das Control in ein anderes Control im Designer eingebettet wird gibt die Eigenschaft immer false zurück,
obwohl noch im Designer gearbeitet wird.

Beispiel:
Control1 lädt eine Liste über einen Anwendungsserver, dies soll allerdings nur im Ausführungsmodus geschehen.
Control2 bindet Control1 ein.
Wenn ihr nun das Control2 noch auf ein Form plaziert habt ihr ein Problem: ;-(
Nun würden beim Designen des Forms die Liste des Control1 geladen werden, wenn man einfach im Control1 über .DesignMode den DesignMode abprüft.
Verwendung dieser Funktion gibt abhilfe.

Statt
"this.DesignMode"
"IsDesignMode(this)"
verwenden.

Diese Funktionalität steht noch nicht im Konstruktor zur verfügung,
Diese Eigenschaft kann im Load Event eines Controls abgefragt werden.


Abgelegt unter: DesignMode, Workaround, Designer, Forms, Controls.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// <summary>
/// Diese Funktion dient der umgehung des .DesignMode Problems in .Net
/// 
/// Die Eigenschaft .DesignMode eines Controls,
///welches die ISite Schnittstelle implementiert gibt zurück, ob sich das Control im DesignMode befindet.
///
///Sobald das Control in ein anderes Control im Designer eingebettet wird gibt die Eigenschaft immer false zurück,
///obwohl noch im Designer gearbeitet wird.
///
///Beispiel:
///Control1 lädt eine Liste über einen Anwendungsserver, dies soll allerdings nur im Ausführungsmodus geschehen.
///Control2 bindet Control1 ein.
///Wenn ihr nun das Control2 noch auf ein Form plaziert habt ihr ein Problem: ;-(
///Nun würden beim Designen des Forms die Liste des Control1 geladen werden, wenn man einfach im Control1 über .DesignMode den DesignMode abprüft.
///Verwendung dieser Funktion gibt abhilfe.
///
///Statt
///"this.DesignMode"
///"IsDesignMode(this)"
///verwenden.
///
///Diese Funktionalität steht noch nicht im Konstruktor zur verfügung,
///Diese Eigenschaft kann im Load Event eines Controls abgefragt werden.
/// </summary>
/// <param name="control">Control, welches auf den DesignMode überprüft werden soll</param>
/// <returns>True Wenn sich das Control im DesignMode befindet</returns>
public static bool IsDesignMode(Control control)
{
    //Solange noch ein Control zum prüfen vorhanden ist
    while (control != null)
    {
        //Die Site Eigenschaft des Controls auslesen
        PropertyInfo siteProperty = control.GetType().GetProperty("Site");

        //Falls die .Site Eigenschaft gefunden wurde
        if (siteProperty != null)
        {
            //Eigenschaftswert auslesen
            ISite site = siteProperty.GetGetMethod().Invoke(control, new object[0]) as ISite;

            //Falls eine Site Eigenschaft vorhanden ist
            if (site != null)
                //Wenn sich das Control im DesignMode befindet
                if (site.DesignMode)
                    //Eins der Controls befindet sich noch im Design Mode
                    return true;
        }

        //Parent auslesen, und auch hier die .DesignMode überprüfen
        control = control.Parent;
    }

    //Kein Control befand sich im Designmode
    return false;
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.