Entwickler-Ecke
Basistechnologien - An UserControl Liste übergeben
Ben4123 - Do 06.02.14 11:08
Titel: An UserControl Liste übergeben
Hallo,
ich habe ein UserControl erstellt, bestehend aus einer Listbox sortiert sie Meldungen chronisch.
mit diesem kleinen Programm hab ich es dann getestet.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| namespace WindowsFormsApplication6 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { userControl11.AddMessage("Start"); }
private void button2_Click(object sender, EventArgs e) { userControl11.AddMessage("Create Items"); }
private void button3_Click(object sender, EventArgs e) { userControl11.AddMessage("Abort"); }
private void button4_Click(object sender, EventArgs e) { userControl11.AddMessage("Loading"); } } } |
um mein Ziel zu erreichen möchte ich aber die Werte nicht mittels Button an meine userControll übergeben und auch nicht mit AddMessage("") sondern alle Meldungen irgendwie ablegen (in einem Objekt oder Klasse??) und später werden die Meldungen von Ereignissen im Programm ausgelöst und an mein userControll übergeben. Wie mache ich das am einfachsten?
Der Code meiner userControll
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| namespace WindowsFormsControlLibrary2 { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent();
listBox1.MultiColumn = false; }
public void AddMessage(string str) { listBox1.Items.Insert(0,str); } } } |
Moderiert von
Th69: Titel korrigiert.
Th69 - Do 06.02.14 13:32
Hallo,
erzeuge einfach eine Klasse, welche diese Liste (List<string>) enthält. Dann erzeuge von dieser Klasse in deiner Hauptform eine Instanz (Objekt) davon und gebe bei Bedarf diese Liste dann an das UserControl weiter (z.B. über eine Eigenschaft Messages oder eine Methode SetMessages).
Ralf Jansen - Do 06.02.14 15:47
Wenn ich dich richtig verstehe hast du einen fixen Satz von Meldungen und keinen beliebigen Freitext und diese potentiellen Meldungen willst du irgendwo verwalten?
Dann bietet sich eine Enumeration an insbesondere auch da sich deine gezeigten Messages eh schon nach Zuständen deiner Anwendung anhören. Zustandssteuerung und Nachrichten lassen sich dann einfach kombinieren.
Um ~lesbaren~ Text zu bekommen kann man den Enum Werten ein Desription Attribut verpassen. Dazu ein passende Extension Method zum auslesen der Description.
Deine Klasse die im Hintergrund die Arbeit macht kann dann einen Event veröffentlichen (nennen wir ihn mal StateChanged) bei dem sich der aktuelle State als Enum in den EventArgs befinden.
Diesen Event dann auf der Form (oder Presenter,Controller etc. je nach Muster) registrieren und den Enum an das userControl übergeben.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public enum State { Start, [Description("Create Items")] CreateItems, Abort, Loading };
public static class MyExtensions { public static string ToUserFriendlyText(this Enum enumValue) { FieldInfo fi = enumValue.GetType().GetField(enumValue.ToString()); var attr = (DescriptionAttribute)fi.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault();
if (attr != null) return attr.Description; else return enumValue.ToString(); } } |
Übrigens, Gute Besserung an die Listbox mit den chronischen Meldungen ;)
Ben4123 - Do 06.02.14 15:52
oh ja die haben chronische beschwerden ^^
ich meinte natürlich chronologisch :)
vielen vielen dank für eure Mühe und Hilfe.
probiere ich gleich aus.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!