2007-04-09, 16:28
#1
Tjena,, tänkte bara dela med mig av lite kod som jag inte hinner vidare på just nu
men som säkert någon har nytta av
OBS den är inte optimerad eller så men funkar!
(Bara lite lekjobb under dom långa knäcka kod timmarna)
Det är en class som läser/ändrar/listar fält i under runtime.
Många får nog tanken "ahh script-motor ala mIRC" och ja så var det tänkt att det skulle vara en del av en sådan :P.
exempel
ChangeField.SetV(string nValue, string TargetName)
ChangeField.SetV(int nValue, string TargetName)
ChangeField.GetV(string FieldName)
ChangeField.SetTarget()
Anger vilken klass man hämtar fält från
ChangeField.ListFields(Type ListType)
Retunerar en String[] med namnen på fälten av den angivna typen
Hela Classen / Test App >
men som säkert någon har nytta av

OBS den är inte optimerad eller så men funkar!
(Bara lite lekjobb under dom långa knäcka kod timmarna)
Det är en class som läser/ändrar/listar fält i under runtime.
Många får nog tanken "ahh script-motor ala mIRC" och ja så var det tänkt att det skulle vara en del av en sådan :P.
exempel
Kod:
private string TestString = "Hejp";
private int TestINT = 22;
private void Form1_Load(object sender, EventArgs e)
{
ChangeField.SetTarget = this;
ChangeField.SetV("Flashback","TestString"); //Ändrar Stringen TestStrings värde till "Flashback"
ChangeField.SetV(33, "TestINT"); //ändrar TestINTs värde från 22 till 33
//Läser värdet på en STRING alt INT
this.Text = ChangeField.GetV("TestString") + " " + ChangeField.GetV("TestINT");
}
ChangeField.SetV(string nValue, string TargetName)
ChangeField.SetV(int nValue, string TargetName)
Kod:
(Namnen fås genom ListFields(Kommer längre ner))
TargetName = Namnet på fältet som ska få ett nytt värde
nValue = Det nya värdet.
ChangeField.GetV(string FieldName)
Kod:
(Namnen fås genom ListFields(Kommer längre ner))
FieldName = Namnet på Fältet som värdet ska hämtas från
ChangeField.SetTarget()
Anger vilken klass man hämtar fält från
Kod:
//Ändra "Form1" till den klass du kommer jobba mot
static Form1 myObject;
static public Form1 SetTarget
{
set { myObject = value; }
}
ChangeField.ListFields(Type ListType)
Retunerar en String[] med namnen på fälten av den angivna typen
Kod:
//Läser alla fält som är STRING
ChangeField.ListFields(typeof(string));
//Och då blir t.ex. alla INTs såhär
ChangeField.ListFields(typeof(int));
osv.
Hela Classen / Test App >
Kod:
using System;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace Testappp
{
public partial class Form1 : Form
{
private string TestString = "Hejp";
private int TestINT = 22;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ChangeField.SetTarget = this;
ChangeField.SetV("Flashback","TestString"); //Ändrar Stringen TestStrings värde till "Flashback"
ChangeField.SetV(33, "TestINT"); //ändrar TestINTs värde från 22 till 33
//Läser värdet på en STRING alt INT
this.Text = ChangeField.GetV("TestString") + " " + ChangeField.GetV("TestINT");
//Läser alla fält som är STRING
ChangeField.ListFields(typeof(string));
//Och då blir t.ex. alla INTs såhär
ChangeField.ListFields(typeof(string));
}
}
public static class ChangeField
{
//Ändra "Form1" till den klass du kommer jobba mot
static Form1 myObject;
static public Form1 SetTarget
{
set { myObject = value; }
}
//** DONT TOUCH ANYTHING BELOW THIS LINE **//
static Type myType;
public static void SetV(string nValue, string TargetName)
{
myType = myObject.GetType();
FieldInfo fInfo = myType.GetField(TargetName,
BindingFlags.NonPublic | BindingFlags.Instance);
fInfo.SetValue(myObject, nValue);
}
public static void SetV(int nValue, string TargetName)
{
myType = myObject.GetType();
FieldInfo fInfo = myType.GetField(TargetName,
BindingFlags.NonPublic | BindingFlags.Instance);
fInfo.SetValue(myObject, nValue);
}
public static string GetV(string FieldName)
{
myType = myObject.GetType();
FieldInfo fInfo = myType.GetField(FieldName,
BindingFlags.NonPublic | BindingFlags.Instance);
return fInfo.GetValue(myObject).ToString();
}
public static string[] ListFields(Type ListType)
{
string tmp = "";
myType = myObject.GetType();
FieldInfo[] fInfo = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
foreach(FieldInfo tmpFieldInfo in fInfo)
{
if ( tmpFieldInfo.FieldType == ListType)
tmp += tmpFieldInfo.Name + " ";
}
return tmp.Trim().Split(' ');
}
}
}