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;
}
|