02. juni 2007 - 23:53Der er
14 kommentarer og 1 løsning
Finde alle statiske int32 variabler på en form.
Hejsa.
Kan det lade sig gøre fra en anden form at finde alle statiske public variabler som er Int32 variabler og som starter med navnet "R_" uden "" selvfølgelig.
Har min hovedform hvor tildelte rettigheder til brugeren sættes ud fra om en Int32 værdi er 1 eller 0. Alle disse værdier hedder R_(et eller andet).
Har så en login form, hvor jeg gerne vil lave et systemadministrations password. En slags bagdør i mit program hvor jeg ved at taste et bestemt langt password ville få alle rettigheder.
Kunne jeg godt tænke mig at lave en løsning hvor jeg søgte frm_main igennem for alle værdier der statede med navnet R_ og så for hver fundet værdi sætte værdien = 1.
Hehe.... Ved ikke om du har set nogle af mine sidste spørgsmål. Der spurgte jeg lidt ind til hvad man skulle forstå under objektorienteret programmering.
Gav op til sidst. Det blev mere forvirrende end det gjorde gavn.
Men det lyder da spændende hvad du siger. Men forstår ikke umiddelbart hvordan jeg kan bruge det?
Min ide er at jeg gerne ville undgå at skulle skrive hver eneste R_.... på hver linie som overstående.
Ville hellere hvis man kunne lave noget ala :
foreach (Int32 I on frm_main.Ints) { I = 1; }
Men det kan måske ikke lade sig gøre eller hvordan?
Tænkte at man godt kunne dette, da man jo godt kan finde alle controls f.eks. Og så tjekke på om navnet starter med noget bestemt og så arbejde med det.
Jo arne, men kan stadig ikke se hvad der så skulle ske i SetAllR?
Det er jo den del jeg mangler.
Jeg ville bare gerne undgå at skulle vide hvad alle rettighedsvariablerne på frm_main hedder. Ville gerne kunne lede efter alle Int32 variabler som starter med R_ og så for hver af disse jeg måtte finde sætte værdien = 1.
class MainClass { public static void Main(string[] args) { A a = new A(); B b = new B(); Display(a); Display(b); } public static void Display(object o) { Console.WriteLine("This is a " + o.GetType().Name); MemberInfo[] members = o.GetType().GetMembers(); foreach(MemberInfo member in members) { if(member.MemberType == MemberTypes.Field) { int var = (int)o.GetType().InvokeMember(member.Name, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, o, null); Console.WriteLine(member.Name + " = " + var); } } } }
Yes.... Takker for hjælpen. Dette blev resultatet, som virker super for mig. Ikke helt så lang en kode som du skrev arne, men det satte mig på det rette spor.
Smid et svar.
Til thesurfer, takker også her... Jeg bør seriøst sætte mig super meget ind i objekt orienteret programmering endag. Måske et V.U.C aftenkursus ;-)
Men ikke lige idag.
/Lasse
---------
public void SetTotalSysAccess() { object o = new frm_main(); FieldInfo[] fieldinfo = o.GetType().GetFields();
foreach (FieldInfo member in fieldinfo) { if (member.IsStatic) { if (member.Name.StartsWith("R_")) member.SetValue(member, 1); } } }
Du bør absolut kigge på noget mere OO. Reflection er et interessant værktøj, men efter min bedste overbevisning ikke det rette værktøj til denne opgave.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.