Autor Beitrag
rano1972
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 28.10.08 13:25 
Danke für dein Hinweis,
wirde ich nachgehen.

hast du vielleicht Beispiel Code oder Links.

Danke
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Di 28.10.08 14:09 
Bitte sehr:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
System.Reflection.Assembly aFrmAsm;
Type aFrmType;
//  Assembly laden
aFrmAsm = System.Reflection.Assembly.LoadFrom("V_Interna.Dll");
//  Formular als Typ bestimmen, d.h. für mich Klasse für Formularaufruf
aFrmType = aFrmAsm.GetType("JThomas.VSPolis.Interna.CInstall");
//  diesen Typ erzeugen
Object aFrmObj = Activator.CreateInstance(aFrmType);
//  konvertieren und direkt aktivieren
CInstall fInstall = (CInstall)aFrmObj;
//  erledige die Bearbeitung
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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Di 28.10.08 16:37 
user profile iconrano1972 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 28.10.08 17:09 
Viel Dank Jürgen

Es hat mir geholfen. ich wird es in meine Applikation implementieren.
rano1972 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 30.10.08 13:19 
die Basis Klasse für alle Controls ist UserControl!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 30.10.08 16:33 
Hallo,

habt Ihr vielleicht code für mich ich hab was getestet aber functioneirt nicht.

ausblenden 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:
ausblenden C#-Quelltext
1:
2:
 Object aCtrlObj = Activator.CreateInstance(aCtrlType); // bis hier läuft gut 
return (UcBase)aCtrlObj; // und hier bekomme ich eine Exeption kann nicht in UcBase umgewandelt werden???


Danke

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt