Autor |
Beitrag |
rano1972
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 28.10.08 10:53
Hallo,
kann mir villeicht jemand hilfen. Ich empfange Daten von Unterschiedlische Hardware. wenn die Daten da sind wird entsprechend einer Configurationsdatei gelesen(pro Hardware einer Configurationsdatei). In diese Datei steht u.a. welches usercontrol(USRchart, USRxygraph,...) soll zur Darstellung der Daten benutzt werden.
wie kann ich ein Usercontrol durch sein Namen(USRchart, USRxygraph,...) dynamisch laden.
unterschidlich HW kann gleiche Usercontrol(mehrer instances) benutzen.
der Control bleibt sollang die HW am PC Angemeldet ist.
Danke
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 28.10.08 13:01
Hallo,
möglich ist es mit Activator.CreateInstance(). Das dadurch zurückgelieferte Objekt muss noch gecastet werden.
Jürgen
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 28.10.08 13:25
Danke für dein Hinweis,
wirde ich nachgehen.
hast du vielleicht Beispiel Code oder Links.
Danke
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 28.10.08 14:09
Bitte sehr:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| System.Reflection.Assembly aFrmAsm; Type aFrmType; aFrmAsm = System.Reflection.Assembly.LoadFrom("V_Interna.Dll"); aFrmType = aFrmAsm.GetType("JThomas.VSPolis.Interna.CInstall"); Object aFrmObj = Activator.CreateInstance(aFrmType); CInstall fInstall = (CInstall)aFrmObj; DialogResult dr = fInstall.Show(); if (dr != DialogResult.OK) { gg.RejectChanges(); Startfehler = 36; } |
CInstall ist ein Formular für bestimmte Einstellungen nach der Installation.
In der SDK-Doku/MSDN ist auch ein Beispiel enthalten, aber so wie hier für den Umweg über GetType.
Bitte stört Euch nicht an den Bezeichnern; diese stammen noch aus einer frühen Version, wo ich noch an die ungarische Notation gewöhnt war.
Jürgen
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 28.10.08 15:25
Hallo,
soll ich alle UserControl im gleichen DLL (namespace) erstellen. Ich hab sie nämlich in unterschiedlichen project in meine Projektmape.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 28.10.08 16:37
rano1972 hat folgendes geschrieben : | soll ich alle UserControl im gleichen DLL (namespace) erstellen. Ich hab sie nämlich in unterschiedlichen project in meine Projektmape. |
Das hängt von der Aufgabenstellung ab. Ähnliche UserControls in eine Assembly zusammenfassen, wesentlich verschiedene trennen. Auch der DLL-Name kann (wie in meinem Beispiel) als variabler String übergeben werden; also ist das kein Problem. Jürgen
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 28.10.08 17:09
Viel Dank Jürgen
Es hat mir geholfen. ich wird es in meine Applikation implementieren.
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 30.10.08 12:45
Hallo,
das Laden hat soweit supper funktioniert. Ein Problem habe ich noch.
bei jedem UserControl habe ich eine public Function(buffer). Sie soll die Daten bekommen und den Control aktuallisieren.
Aufbau:
ein klasse Hardware hat u.a. eine Objekt private System.Windows.Forms.Control HWControl;
in HWControl wird mit Activator.CreateInstance(aCtrlType); ein control gespeichert.
jdes Mal wenn neue Daten angekommen sind wird die Hardware Klasse aktuallisiert und somit soll auch der control aktuallisiert werden (über diese public Function(buffer).
Danke.
PS: code wäre immer eine gute sache
Zuletzt bearbeitet von rano1972 am Do 30.10.08 13:08, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 30.10.08 12:59
Und was ist jetzt das Problem? 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 30.10.08 13:02
sorry,
wie kann ich auf diese Funktion zugreifen mit dem Punkt geht nicht.
this.HWControl.function(buffer); GEHT NICHT !!!
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 30.10.08 13:12
Ich hoffe, alle deine Usercontrols besitzen eine gemeinsame Basisklasse/Interface mit dieser Methode (wenn nicht, dann wird's Zeit  ). Dann musst du nur noch den Rückgabewert von CreateInstance auf diese Basisklasse casten.
_________________ >λ=
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 30.10.08 13:19
die Basis Klasse für alle Controls ist UserControl!
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Do 30.10.08 13:41
Kha meint: Die Basisklasse für alle diese UserControls, die den Buffer enthalten, soll UserControlContainingBuffer sein, und dieses ist von UserControl abgeleitet. Dann kannst Du das Ergebnis von CreateInstance eben auf UserControlContainingBuffer casten und kannst auf Buffer zugreifen. Jürgen
|
|
rano1972 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 30.10.08 16:33
Hallo,
habt Ihr vielleicht code für mich ich hab was getestet aber functioneirt nicht.
C#-Quelltext 1: 2: 3: 4: 5: 6:
| public class UcBase : UserControl { public UcBase() { } public virtual void SetControlData(XmlNodeList NodeDataList, XmlNodeList SensorControlList){} } |
für alle meine Controls gilt
meinControl : UcBase
wenn ich jetzt das hier benutze:
C#-Quelltext 1: 2:
| Object aCtrlObj = Activator.CreateInstance(aCtrlType); return (UcBase)aCtrlObj; |
Danke
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|