Torna al Thread

//Questa variabile conterrà l'assebmbly caricato dal file System.Reflection.Assembly yourAssembly; try { //Prova a caricare l'assembly da un file yourAssembly = Assembly.LoadFile("Nome file"); } catch (Exception ex) { //Se viene generato un errore mostra un messaggio d'avviso //Con nome dell'errore e messaggio e interrompe la ricerca MessageBox.Show(string.Format( "Si è verificato il seguente errore:\r\n{0}:\r\n{1}", //Il nome dell'eccezione e il messaggio ex.GetType().Name, ex.Message)); return; } //Cancello i nodi della TreeView tuaTreeView.Nodes.Clear(); //Con GetTypes si ottengono tutti i tipi dichiarati nell'assembly foreach (Type t in yourAssembly.GetTypes()) { //Con IsSubclassOf si ottiene un valore booleano //Che indica se la classe deriva (direttamente o non) //Dal tipo specificato if (t.IsSubclassOf(typeof(Form))) { //Se sì aggiungo il nome della classe all'elenco dei nodi //E memorizzo il nodo per poter aggiungere eventuali sottonodi TreeNode addedForm = tuaTreeView.Nodes.Add(t.Name); //-------------Ho aggiunto questa riga: //Creo un'istanza del tipo, che uso dopo per ricevere i controlli interni object instance = yourAssembly.CreateInstance(t.FullName); //Faccio il controllo di tutti i campi della Form; //Con GetFields si ottengono i campi pubblici dichiarati foreach (FieldInfo field in t.GetFields(bf)) { //Controllo che il campo sia di un tipo che derivi da Control //-----Questo è stato modificato in modo da includere //-----anche Control e non solo i derivati: if (field.FieldType.IsSubclassOf(typeof(Control)) || field.FieldType == typeof(Control)) { //Aggiungo il nodo come sottonodo del nodo Form: TreeNode addedCtrl = addedForm.Nodes.Add(field.Name); //Ottengo le proprietà dal campo specificandone il nome PropertyInfo textProp = field.FieldType.GetProperty("Text"); //Controllo che la proprietà non sia null; se lo è //significa che la properietà non esiste (o non è visibile) if (textProp != null) { //ottengo il valore di field assunto nell'istanza instance ottenuta prima object fieldOfInstance = field.GetValue(instance); //Controllo che il campo non sia null if (fieldOfInstance != null) { //Quindi ottengo la proprietà dal campo: string value = textProp.GetValue(fieldOfInstance, null).ToString(); //e l'aggiungo come sottonodo addedCtrl.Nodes.Add("Text: " + value); } } } } } }
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5