05. oktober 2012 - 15:41Der er
5 kommentarer og 1 løsning
Konverter elementer i Comboboks til felter i metode
Hej,
Håber I kan hjælpe.
Jeg har en klasse der indeholder forskellige metoder med diverse felter.
Eksempelvis:
class Test { public double KM { get; set; }
public double OK { get { return 144; } set { KM = value * 144; } } public double Meter { get { return KM / 155; } set { KM = value * 155; } } } Når jeg skal kalde klassen, så kan jeg gøre sådan her:
Test mintest = new Test(); mintest.Meter = 110; double d_meter = mintest.OK;
Nu har jeg flere klasser med mange metoder og kunne godt tænke mig at kunne vælge felterne i metoderne ved hjælp af en Comboboks. Så eksempelvis mintest.Meter blev genereret ud fra en Comboboks hvor i det valgte element var Meter.
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;
namespace E { public class Foobar { public int A { get; set; } public int B { get; set; } public int C { get; set; } } public partial class MainForm : Form { public MainForm() { InitializeComponent(); comboBox1.DataSource = new List<Tuple<string, Action<Foobar,int>>> { new Tuple<string, Action<Foobar,int>>("Set A",(o,v)=>o.A=v), new Tuple<string, Action<Foobar,int>>("Set B",(o,v)=>o.B=v), new Tuple<string, Action<Foobar,int>>("Set C",(o,v)=>o.C=v) }; comboBox1.DisplayMember = "Item1"; comboBox1.ValueMember = "Item2"; } void Button1Click(object sender, EventArgs e) { Foobar o = new Foobar(); ((Action<Foobar,int>)comboBox1.SelectedValue).Invoke(o, int.Parse(textBox1.Text)); MessageBox.Show(o.A + "|" + o.B + "|" + o.C); } } }
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;
namespace E { public class Foobar { public int A { get; set; } public int B { get; set; } public int C { get; set; } } public partial class MainForm : Form { public MainForm() { InitializeComponent(); comboBox1.DataSource = new List<Tuple<string, Action<Foobar,int>>> { new Tuple<string, Action<Foobar,int>>("Set A",(o,v)=>o.A=v), new Tuple<string, Action<Foobar,int>>("Set B",(o,v)=>o.B=v), new Tuple<string, Action<Foobar,int>>("Set C",(o,v)=>o.C=v) }; comboBox1.DisplayMember = "Item1"; comboBox1.ValueMember = "Item2"; } void Button1Click(object sender, EventArgs e) { Foobar o = new Foobar(); ((Action<Foobar,int>)comboBox1.SelectedValue).Invoke(o, int.Parse(textBox1.Text)); MessageBox.Show(o.A + "|" + o.B + "|" + o.C); } } }
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.