Laden...

Attribut-Objekte? einheitlich ansprechen (z.B. über ein Array)?

Erstellt von Nova vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.344 Views
N
Nova Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren
Attribut-Objekte? einheitlich ansprechen (z.B. über ein Array)?

Hi Leute,

ich hab hier etwas wo ich wirklich am Verzweifeln dran bin und zweifle langsam auch schon ob es überhaupt eine Möglichkeit gibt. g

Also hier die Masterfrage: Wie krieg ich Attribut-Objekte in ein Array bzw. einheitlich ansprechbar (z.B. über ein Index)?

Hier ist der Part über den GUIButtons deklariert werden (die Inhalte werden über eine XML-Datei eingelesen). Spreche ich nach der Deklaration einen Button direkt an, z.B. button1.Label = "Test", funktioniert das tadellos. Doch ich habe genau 37 von diesen Buttons und da wäre es schon sinnvoll die Buttons über eine Schleife ansprechen zu können. Z.B. mit einem Index wie bei einem Array: buttonArray[0].Label = "Test". Dabei dürfen die Buttons nach der Deklaration/Initialisierung auch nicht einfach in ein Array kopiert werden, denn ich brauche genau diese Objekte im Zusammenhang mit dem Attribut (das in eckigen Klammern), sonst funktioniert es nicht.


[SkinControlAttribute(101)]  protected GUIButtonControl button1=null;
[SkinControlAttribute(102)]  protected GUIButtonControl button2=null;
[SkinControlAttribute(103)]  protected GUIButtonControl button3=null;
[SkinControlAttribute(104)]  protected GUIButtonControl button4=null;

Hat jemand dazu eine Idee, dass muss doch irgendwie gehen. 🙂
Ich habe auch schon probiert mit Referenzen, Pointern und einem Array zu arbeiten, aber irgendwie hab ich das auch nicht hinbekommen.

Danke schonmal im Voraus, hoffe mir kann jemand helfen! 🙂

Gruß Nova

N
Nova Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren

Hm,

hab jetzt schon in mehreren Foren gefragt und keine weiß ne Lösung, gibt es denn keine C#-Master? 😦

Falls es zu unverständlich ist, bitte einfach mal hier gucken, da ist ganz Unten ein Beispiel-Code der genau das enthält, was ich geschildert hab (mit den Buttons aus der XML-Datei parsen und auch mit den Zugriff auf den Buttons, aber wie kann ich über ein Array oder so auf die Buttons zugreifen?).

Link zum Mini-Sourcecode: http://mediaportal.sourceforge.net/PluginTutorial/PluginTutorial.htm

Gruß Nova

D
124 Beiträge seit 2005
vor 18 Jahren

Original von Nova
Dabei dürfen die Buttons nach der Deklaration/Initialisierung auch nicht einfach in ein Array kopiert werden, denn ich brauche genau diese Objekte im Zusammenhang mit dem Attribut (das in eckigen Klammern), sonst funktioniert es nicht.

Ehrlich gesagt verstehe ich dein Problem nicht.
Wenn, dann würdest du die Buttons ja nicht in ein Array kopieren, sondern ein Array definieren, welche die Buttons enthält (also die originalen Button Objekte).
Somit hast du dann natürlich über Reflektion auch die Möglichkeit die Attribute der einzelnen Buttons auszulesen, da die Buttons ja die Attribute kennen, welche für sie definiert wurden:


List<Button> buttonList = new List<Button>();

// PseudoCode
foreach(ButtonDefinition in XmlDatei)
{
  Button b = // Erzeugung mittels Reflection
  buttonList.Add(b);
}

// Später können die Attribute der Buttons ausgelesen werden

for(int i = 0; i < buttonList.Count; ++i)
{
  Button b = buttonList[i];
  // mittels Reflection das SkinControlAttribute des Buttons auslesen
}


P
939 Beiträge seit 2003
vor 18 Jahren

Also wie Dan schon angedeutet hat, geht das über Reflection.

Du brauchst eine Liste mit den Namen der GUIButton-Felder (stehen in der Xml-Datei?). Dann kommst du auf folgende Weise an die SkinControlAttributes:

FieldInfo button1Info = myForm.GetType().GetField("button1");
SkinControlAttribute attr1 = (SkinControlAttribute)Attribute.GetCustomAttribute(
   button1Info, 
   typeof(SkinControlAttribute));

Du kannst dir natürlich auch alle Felder einer Klasse geben lassen und gucken, welche ein SkinControlAttribute gesetzt haben. Dann braucht man die Feldnamen nicht.

Gruss
Pulpapex