Autor Beitrag
Ben4123
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 06.02.14 11:08 
Hallo,

ich habe ein UserControl erstellt, bestehend aus einer Listbox sortiert sie Meldungen chronisch.

mit diesem kleinen Programm hab ich es dann getestet.

ausblenden volle Höhe 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

ausblenden 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 user profile iconTh69: Titel korrigiert.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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).

Für diesen Beitrag haben gedankt: Ben4123
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 ;)

Für diesen Beitrag haben gedankt: Ben4123
Ben4123 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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.