Autor Beitrag
sk-io
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.05.12 14:39 
Hallo,

Ich habe in mehreren Apps eine methode die normalerweise CheckForEmptyFields heisst und genau dieses tut - hier ist ein kleiner Auschnitt:

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:
32:
33:
private bool NMRCheckForEmptyFields()
        {
            bool r = true;
            if (comboBox_NMRNames.Text == "")
            {
                comboBox_NMRNames.BackColor = Color.Red;
                r = false;
            }
            else
            {
                comboBox_NMRNames.BackColor = Color.White;
            }

            if (numericUpDown_NMRQuantity.Value == 0)
            {
                numericUpDown_NMRQuantity.ForeColor = Color.Red;
                r = false;
            }
            else
            {
                numericUpDown_NMRQuantity.ForeColor = Color.Black;
            }
            
            if (textBox_NMRDescription.Text == "")
            {
                textBox_NMRDescription.BackColor = Color.Red;
                r = false;
            }
            else
                textBox_NMRDescription.BackColor = Color.White;

            return r;
        }


Sehr linear und langweilig das ganze. Benutze aehnlichere Methoden seit den Win32asm tagen :)

Nun bin ich immer noch sehr gruen hinter den Ohren aber koennte man dies nicht um ein Interface wickeln? Sodass ich CheckForEmptyFields bloss ein Array von textboxes, comboboxes oder aehnlicherem senden kann und die mir dann die Felder Rot oder Weiss pinselt?

Ich bueffele gerade an der Theory fuer Interfaces doch weiss ich nicht wo genau anfangen? Eine eigene Klasse?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 30.05.12 14:46 
Ich denke nicht, dass die verschiedenen Komponentenklassen ein Interface implementieren, was die von Dir gewünschte Funktionalität enthält.

Da wirst Du schon ein bisschen manueller vorgehen müssen: Übergebe der Methode ein Component[]-Array. Für jedes Element des Arrays prüfst Du, welchen Typ das hat und castest es dann in den richtigen Typ, um den entsprechenden Vergleich zu machen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
ujr
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: Mi 30.05.12 15:29 
user profile iconsk-io hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe in mehreren Apps eine methode die normalerweise CheckForEmptyFields heisst und genau dieses tut - hier ist ein kleiner Auschnitt


Damit werden immer alle Controls getestet, selbst wenn sie korrekt waren und nicht geändert wurden. Besser ist es, die vorhandenen Mechanismen zur Validierung zu nutzen: User Input Validation in Windows Forms
sk-io Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.05.12 19:23 
user profile iconujr hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconsk-io hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe in mehreren Apps eine methode die normalerweise CheckForEmptyFields heisst und genau dieses tut - hier ist ein kleiner Auschnitt


Damit werden immer alle Controls getestet, selbst wenn sie korrekt waren und nicht geändert wurden. Besser ist es, die vorhandenen Mechanismen zur Validierung zu nutzen: User Input Validation in Windows Forms


Ich wuerde gerne mal wissen wieviele von uns denn tatsaechlich individuelle Validating events schreiben. :) Bei einem 'normaler' Form (Name, Addresse, usw) waeren dies schon 6+ die bloss checken wurden ob es IsNullOrEmpty waere. Ich sehe ein dass ein ValidateChildren() sehr nuetzlich sein kann, doch ist es fuer Otto NormalCoder ?
sk-io Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Mi 30.05.12 19:32 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:

Da wirst Du schon ein bisschen manueller vorgehen müssen: Übergebe der Methode ein Component[]-Array. Für jedes Element des Arrays prüfst Du, welchen Typ das hat und castest es dann in den richtigen Typ, um den entsprechenden Vergleich zu machen.


versuchen kann ichs ;)
ujr
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: Do 31.05.12 09:20 
user profile iconsk-io hat folgendes geschrieben Zum zitierten Posting springen:
Bei einem 'normaler' Form (Name, Addresse, usw) waeren dies schon 6+ die bloss checken wurden ob es IsNullOrEmpty waere.


Das lässt sich stark reduzieren, insbesondere, wenn die Prüfmethoden identisch sind.

So könnte man für alle Textboxen die selben Validating/Validated-Ereignisbehandlungen verwenden, für alle NumericUpDown die selben usw. Man kann sogar, da die Methoden immer die selbe Signatur haben, überhaupt für alle Ereignisse die selbe Methode verwenden und überprüft den Typ des Senders.
Schließlich könnte man die Ereignisse auch mit anonymen Methoden oder Lambda-Expressions bearbeiten und diese alle in einer speziellen Methode zuweisen (also auch zentral).