Reflection(C#)

wae20

Grünschnabel
Hallo alle,

Habe ne Frage, wie kann ich unter c# mit reflection auf indexer zugreifen?
z.B. das würde ich gern mit reflection aufrufen:
DataGridView _dataGridView = new DataGridView();
_dataGridView[1,1].Value...

habe so versucht, war aber leider falsch:

System.Windows.Forms.DataGridViewCell _reflection = (_dataGrid[getIndex(1,1)]) as System.Windows.Forms.DataGridViewCell;
_reflection[1,1].Value...

Ich danke euch im Voraus
LG
Wäl
 
Hallo,

der zugriff müsste dir ne Fehlermeldung gebracht haben.
Dein Zugriff müsste so aussehen:
_dataGridView[1][1].Value;

Der Zugriff sieht dann so aus, dass du Zuerst den Index der Zeile(Row) nimmst und dann den Index der Spalte(Column).

mfg
wensi
 
Danke Wensi,

Aber der Fehler ist beim Aufruf der reflection, bevor ich Value benutzt! Wenn das rechtig wär, dann kann ich Item.Value benutzen:

System.Windows.Forms.DataGridViewCell Item = (_dataGridView(1][1]) as System.Windows.Forms.DataGridViewCell;

Äquivalent dazu: (das funktioniert. dann Item.Count...)

System.Collections.ICollection Item = (_dataGridView1["Rows"]) as System.Collections.ICollection;

Grüße
Wäl
 
Das hast doch alles mit Reflection nichts zu tun. Das eine nennt sich casten ( (String)myObject) und das andere ist der Conversion Operator (as).
 
Na klar, das Ergebnis wird hier gecastet, aber die Frage betrifft die Reflection.
Wie wurdest du auf indexer mit Reflection zugreifen?

object Item1 = _dataGridView1([1][1]); ? das ist falsch :(

Äquivalent dazu, (das funktioniert):

object Item2 = _dataGridView2["Rows"];
int x = (Item2.Count)....casten noch

Ich bauche das, da hier z.B. das _dataGridView2 kein Count-Methode hat, aber so fuktioniert es. (aus dem Grund das die klasse von _dataGridView2 ein andere klasse erbt, die die Count-Methode hat)

Grüße
Wäl
 
Was ist denn dein Ziel? Es ist nicht wirklich erkennbar, a) was du vor hast und b) warum die das was du machen willst mit Reflection machen willst.
 
Um z.B. das im rot zuerreichen, ListBoxTester hat kein Contains, aber ListBox schon,
da: public class ListBoxTester : ControlTester<ListBox, ListBoxTester>....
das ListBoxTester ist von NUnit und testet Win...Forms.ListBox

ListBoxTester _listDB = new ListBoxTester("listDB", "myTool");

System.Collections.ICollection ItemsListDB = (_listDB["Items"]) as System.Collections.ICollection;

if (ItemsListDB != null)
{
if (ItemsListDB.Contains("ItemName"))
{usw. .......
 
Dann schau dir mal die Erweiterungsmethoden an, die es ab C# 3.0 (VS 2008) bietet.
Davon abgesehen, warum implementierst du für deine Tests nicht einfach eine Methode, welche die ListBox durchläuft und nachschaut ob der gesuchte Eintrag vorhanden ist... Contains macht schließlich nichts anderes.
 
Ja, das war nur ein Beispiel um das erwähnte Problem zu erklären und deine frage "Was ist denn dein Ziel?" zu antworten. es geht um: mit reflection auf indexer zugreifen?
 
Hilfe

Habe immer noch keine Lösung ->wie kann ich mit reflection auf indexer zugreifen?
noch ein Beispiel:

das geht :) : object x = ControlTesterTreeList["AllNodesCount"];

das geht NICHT :( wegen die (1): object x = ControlTesterTreeList["GetNodeByVisibleIndex(1)"]

LG
 

Neue Beiträge

Zurück