Autor Beitrag
Soc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Mo 12.10.09 11:16 
Hallo Zusammen,

{Vorsicht: Folgende Frage bitte nur von Anfänger-Freunde beantworten welche auch mal Anfänger waren :D ]

In der StatusBar habe ich einige Labels, welche über einen Timer den aktuellen Status wiedergeben. (Z.B. Anzahl der aktuellen Background Threads)
Alle Labels werden während der Laufzeit (abhängig von dem Inhalt) geändert (z.B. Hintergrundfarbe).

Da diese Eigenschaftsänderung bei vielen Labels gleich aussieht, würde ich sie gerne in eine Methode auslagern.

Dieser Methode sollte den Labelnamen übergeben werden, mit dem sie dann die entsprechenden Eigenschaften setzen soll.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        public void SetObject(Control objname)
        {
            objname.BackColor = SystemColors.Control;
            objname.ForeColor = Color.Green;
            objname.Text = "043/039";
        }


Jetzt habe ich nur das Problem das ich den Objectnamen nicht übergeben bekomme.

Hat jemand einen Tip ?

Danke.

Soc

P.S. Vorab: Ja, ich bin Anfänger; ja, ich habe noch nicht alle anderen Quellen gelesen und auswendig gelernt :D
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 12.10.09 12:24 
Hallo,

erstellst du die Controls dynamisch? Wenn ja pack sie einfach eine Liste und geh dann durch diese durch.

Gruß Daniel
Soc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Mo 12.10.09 12:52 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:

erstellst du die Controls dynamisch? Wenn ja pack sie einfach eine Liste und geh dann durch diese durch.


Hallo Daniel,

nein, ich habe sie normal mit Visual Studio im Formular erzeugt.

Gruss

Soc
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 12.10.09 13:09 
hmm.. ich glaub bei Visual Studio 6.0 gab es noch die Option beim Design zu sagen, dass er die Elemente in ein Array packen soll - hab ich aber nun bei 2008 nicht gefunden.

Alternativ musst du es halt per Hand machen. D.h. zum Beispiel im Constructor eine globale/member Liste mit den relevanten Controls befüllen.

Ach wenn du nicht bestimmte Controls, sondern alle Controls verändern willst kommst du über die Form-Klasse an die Controls:

ausblenden C#-Quelltext
1:
2:
3:
4:
            foreach (Control control in this.Controls)
            {
                SetObject(control);
            }
Soc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Mo 12.10.09 13:51 
Hallo Daniel,

wie müsste solch ein Array aufgebaut werden ?
Ich habe zwar alle Namen der Labels, aber einfach nur den Namen einzutragen hilft glaube ich nicht viel, oder ?
Das würde ja meine erste Methode (Übergabe des Namen) gleich kommen und das geht nicht.

Sorry das Du hier jetzt grundlegende Verständnisfragen von OOP bzw. .NET beantworten darfst.

Gruss

Soc
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 12.10.09 14:09 
Wenn du deine Controls mit dem Designer auf das Form ziehst, erstellt er automatisch einen privaten Member für die Formklasse. D.h. innerhalb der Formklasse kannst du auf diese Variable zugreifen.

Zum Beispiel erstellt er, wenn du ein Label auf das Form ziehst einen Member mit dem Namen: label1.
TextBox wird zu textbox1 bzw. eine zweite zu textbox2 usw.

Deklarier einfach eine Collection in deiner Klasse und füge dieser im Konstruktor die Controls hinzu die du später verändern willst.

Z.B.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
    public partial class Form1 : Form
    {
        List<Control> _RelevantControls = new List<Control>();

        public Form1()
        {
            InitializeComponent();

            _RelevantControls.Add(this.label1);
            _RelevantControls.Add(this.textBox1);
            _RelevantControls.Add(this.textBox2);
        }

        public void SetBackgroundColor(Color color)
        {
            foreach (Control control in this._RelevantControls)
            {
                control.BackColor = color;
            }
        }
    }
Soc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Di 13.10.09 16:11 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du deine Controls mit dem Designer auf das Form ziehst, erstellt er automatisch einen privaten Member für die Formklasse. D.h. innerhalb der Formklasse kannst du auf diese Variable zugreifen.

Zum Beispiel erstellt er, wenn du ein Label auf das Form ziehst einen Member mit dem Namen: label1.
TextBox wird zu textbox1 bzw. eine zweite zu textbox2 usw.

Deklarier einfach eine Collection in deiner Klasse und füge dieser im Konstruktor die Controls hinzu die du später verändern willst.



Hallo,

danke für die Info.
Soweit, so gut. Grundsätzlich geht es, solange sich der Control in der Form1 befindet.
Jetzt sind meine relevanten Labels aber in ein statusStrip1 und somit habe ich das Beispiel wie folgt abgeändert:
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:
23:
    public partial class Form1 : Form
    {

        List<ToolStripStatusLabel> _RelevantControls = new List<ToolStripStatusLabel>();

        public Form1()
        {
            InitializeComponent();

            _RelevantControls.Add(this.toolStripStatusLabel1);
            _RelevantControls.Add(this.toolStripStatusLabel3);

            SetBackgroundColor(Color.Yellow);
        }

        public void SetBackgroundColor(Color color)
        {
            foreach (ToolStripStatusLabel control in this._RelevantControls)
            {
                control.BackColor = color;
            }
        }
    }


Danke für die Hilfe !!!

Gruss

Soc