Ich möchte zur Laufzeit aus einem Form-Namen als String ein Form-Objekt erzeugen. Ich mache das über Type.GetType() und Activator.CreateInstance().
Das ganze klappt auch, wenn das zu erstellende Formobject bzw. Klasse im gleichen Projekt ist. Da ich aber eine Projektmappe mit einem Startprojekt (exe) mit diversen Projekten (DLLs) habe, möchte ich auch aus anderen Projekten die Forms erzeugen. Das klappt leider nicht. Im Hauptprojekt ist der Namespace bekannt. Auch der Verweis auf die DLL in vorhanden. Es kommt immer der Fehler "... Klasse konte nicht geladen werden" bei Type.GetType().
private Control createNewControl(string controlToCreate)
{
Form myControl = new Form();
try
{
//Define the type of the control you want to create an instance of using reflection.
Type typeofControl = Type.GetType(controlToCreate, true);
myControl = (Form)(Activator.CreateInstance(typeofControl));
//(myControl as Form).Show();
}
catch (Exception ex)
{
//Set the control to null
myControl = null;
}
return myControl;
}
Gruß
Holger
Danke für die schnelle Antwort, obwohl ich dies nicht hören wollte.
Kann doch wohl nicht wahr sein, soll das ein Feature sein.
Holger
Mein Problem ist folgendes:
Ich habe ein Form mit einem Grid, einem Panel, diversen Buttons und einer Datagridview. Ich habe nun das Form vererbt. In der vererbten Klasse kann ich nicht alle Controls bearbeiten. Bei allen Buttons z.B. kann die die Properties im Designer setzen, beim Grid, und Panel z.B. kann die keine Properties im Designer setzen, alle Properties sind disabled. Die Property "Modifiers" im Basisform ist auf public, locked=false.
Vom Programm heraus kann ich die Properties trotzdem alle setzen. Warum gehts bei den einen Controls und nicht bei den anderen?
Gruß
Holger
Ich habe mich da wohl etwas falsch ausgedrückt.
Ich habe ein Grid mit einer gebundenden Datatable. Im Grid habe ich nun nichtgebundene Spalten hinzugefügt, die aber nicht in der Table vorhanden sind. Die nichtgebundenen Spalten will ich nun selber füllen. Und dafür brauche ich ein entsprechenden Ereignis.
CellFormatting war aber trotzdem eine gute Idee. Klappt auf jeden Fall.
Gruß
Holger
Ich habe ein gebundenes Datagridview. Nun habe ich zwei Spalten hinzugefügt, die nicht gebunden sind, die ich nun selber füllen will.
Welches Ereignis kann ich dafür nehmen, dass immer alle sichtbaren Spalten gefüllt werden. Ich möchte nicht beim Starten alle Spalten durchlaufen, da ich nicht weiß, wieviel Datensätze vorkommen können.
Holger
Danke für die Antworten. Die SQL-Direct Komponenten von http://www.devart.com/ scheinen ja genau das sein, was ich suchte. Ich werde mir mal die Trial runterladen und mal testen.
@Robert
Hast du die Komponten, bzw. die SQL-Direct-Komponten von devart.com schon in Betrieb und kannst was drüber sagen?
Gruß
Holger
Mit den Standard-Borland Komponenten hatte ich nie was gemacht. Ich hatte mir gleich die SQL-Direct Komponenten besorgt. Diese bieteten einen Nativ-Zugriff und waren damit sehr schnell. Beim damaligen Projekt waren die Insert sehr zeitkritisch und darauf kam es mir an.
Z.B. bei der TSDQuery-Komponente wird das Connection-Objekt gesetzt, die SQL-String (mit where-Bedingung) angegeben und dann Active=true. Alle Insert, Delete und Updatekomponenten werden automatisch erzeugt. Bei Änderung der Tabelle werden alle abhängigen Objekte aktualisiert. und, und, und...
Datenbankänderung werden einfach mit
Object.edit;
... Felder setzen
Object.ApplyUpdates
gemacht.
Entweder sehe ich die Einfachheit in Visual Studio gegenüber Delphi nicht oder in VS ist es einfach komplizierter. Ich muß in VS immer mehr Code erzeugen, als es Delphi nötig war. Zur Zeit arbeite ich immer mit SQLCommand+SQLDataReader und SQLDataAdapter.
Ich arbeite momentan mir dem 2.0 Framework. Das Problem ist, das auf den Zielrechnern, auf den meine Software läuft, nicht immer sichergestellt ist, das dort das neuste Framework installiert ist.
Gruß
Holger
Ich arbeite schon länger mit Delphi. Dort gibt es für den DB-Zugriff die SQL-Direct Komponenten, die ich persönlich einfach genial finde.
Gibt es für das Visual Studio auch entsprechende Komponenten von Fremdanbietern, die den Zugriff auf Datenbank vereinfachen. Das Arbeiten mit den von Haus aus gebotenen Möglichkeiten (SQLCommand, SQLReader usw) geht zwar auch, ist aber meiner Meinung nach nicht gerade komfortabel.
Gruß
Holger
Danke, manchmal ist das Leben doch so einfach 🙂
Gibts eigentlich eine (einfache) Möglichkeit, mit C# die aktuelle Framework-Version zu bestimmen, bzw. eine Liste aller Versionen die installiert sind, zu bekommen.
Gruß
Holger