[.NET/C#] PropertyGrid reflected assembly

Pagina: 1
Acties:

  • cenix
  • Registratie: September 2001
  • Nu online
Is het mogelijk om de properties van een klasse op te halen waarbij de klasse via een soort controller via een aparte assembly opgehaald wordt om in een propertygrid weer te geven?

Mijn structuur is dus als volgt

assembly met de klassen (waarbij de juiste attributen enzo gezet zijn voor een propertygrid)
|
|
v
assembly met 'controller' welke een referentie naar de klasse bijhoudt
|
|
v
assembly die de controller instantieert en de GUI (met propertygrid) beheerd.

Ik krijg de propertygrid werkend, als alle klassen in 1 assembly staan, maar zodra ik ze splits over meerdere assemblies dan blijft mijn propertygrid leeg.
Als ik door de code heen stap, dan 'lijkt' het erop dat de juiste zaken aangeroepen en uitgevoerd worden, maar de grid blijft leeg.

Ik heb een tijdje zitten googlen en op msdn zitten snuffelen, maar wellicht zoek ik verkeerd, maar ik krijg het niet voor elkaar.
Termen die ik o.a. gebruikt heb zijn: "C# PropertyGrid reflected assembly", ".NET PropertyGrid reflected assembly", "C# PropertyGrid assembly reference".

Is er een .NET/C# goeroe die weet hoe dit wel kan?

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:18
Hoe bedoel je ?
Je wil de properties opvragen van een bepaalde class ? Dit kan mbhv reflection.

code:
1
PropertyInfo[] props = typeof(MyClass).GetProperties();

[ Voor 27% gewijzigd door whoami op 28-12-2005 20:10 ]

https://fgheysels.github.io/


  • cenix
  • Registratie: September 2001
  • Nu online
Ik wil dat de properties van een bepaalde class automatisch in een propertygrid komen te staan. Via reflection opvragen gaat nog wel, maar het lijkt erop dat deze niet automatisch de propertygrid vullen als de klassen in een andere assembly staan.

Zelf kan ik wel met reflectie die zaken ophalen, maar ik wil ze dus in een propertygrid hebben
toevoeging reflectie

[ Voor 22% gewijzigd door cenix op 28-12-2005 20:31 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:18
Ik heb net even een testje gedaan;
Ik heb een solution gemaakt met daarin in een windows app project, en een classlib project.

In m'n winforms project heb ik een form met een property-grid.
In m'n library project heb ik een simpele class.

Mbhv deze code:
code:
1
2
ClassLibrary1.Class1 c = new ClassLibrary1.Class1();
propertyGrid1.SelectedObject = c;

werkt het gewoon.

Ik zie eigenlijk ook niet in waarom het niet zou werken als je class in een andere assembly zit; dit zou gewoon niet mogen uitmaken. Wellicht doe je wat verkeerd ?

https://fgheysels.github.io/


  • cenix
  • Registratie: September 2001
  • Nu online
Het verschil zit hem erin dat jij die classlib in dezelfde solution hebt staan (dus in dezelfde assembly). Ik moet mijn library echt als een assembly behandelen, e.g. met Assembly.LoadFile() aanroepen.

Tevens heb ik er nog een aparte controller tussen staan, waardoor het propertygrid.SelectedObject niet meer direct het object kan aanroepen, maar dit via de controller gaat.

Ik had dus iets als propertyGrid.SelectedObject = _controller.State,
waarbij _controller.State een get property is die een referentie naar het huidige state object teruggeeft.

edit:

Ik moet zo weg, dus ik kijk morgen pas weer naar eventuele replies :)

[ Voor 8% gewijzigd door cenix op 28-12-2005 21:16 ]


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

cenix schreef op woensdag 28 december 2005 @ 21:15:
Het verschil zit hem erin dat jij die classlib in dezelfde solution hebt staan (dus in dezelfde assembly).
Nee, de solution is slechts een groep projecten bij elkaar verzameld. Een project compileert naar een assembly. Met twee projecten in één solution krijg je toch echt twee assemblies. Als je deze projecten in losse solutions zet krijg ook twee assemblies.
Voor het eindresultaat maakt het absoluut niet uit hoeveel solutions je gebruikt. Het is echter wel onhandig om meerdere solutions te gebruiken, al die open Visual Studio vensters 8)7

[ Voor 25% gewijzigd door Zr40 op 28-12-2005 22:00 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:18
cenix schreef op woensdag 28 december 2005 @ 21:15:
Het verschil zit hem erin dat jij die classlib in dezelfde solution hebt staan (dus in dezelfde assembly). Ik moet mijn library echt als een assembly behandelen, e.g. met Assembly.LoadFile() aanroepen.

Tevens heb ik er nog een aparte controller tussen staan, waardoor het propertygrid.SelectedObject niet meer direct het object kan aanroepen, maar dit via de controller gaat.

Ik had dus iets als propertyGrid.SelectedObject = _controller.State,
waarbij _controller.State een get property is die een referentie naar het huidige state object teruggeeft.
Dat zou allemaal niets mogen uitmaken.
Heb je een paar stukjes relevante code ?

https://fgheysels.github.io/


  • cenix
  • Registratie: September 2001
  • Nu online
Hmm.. Ik had zojuist een nieuw project opgebouwd waarin ik alleen de relevante stukken had geplaatst (opnieuw). Nu blijkt dat ik mijn classes in de andere assembly niet van een access modifier voorzien had (e.g. geen public gemaakt). Hierna werkte het spul wel.

Ik weer terug naar mijn oorspronkelijke solution en daar geprobeerd, wat blijkt. Ik zie de propertygrid gevuld worden, om 1 seconde daarna weer blank te worden. Even zoeken waarom dit zo is.
Pagina: 1