Autor Beitrag
Heddi
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 23.02.13 11:08 
Hi,

bin ein absoluter Frischling in der Sprache C#.

Ich habs schon soweit geschafft, das ein Digitalwert (vom µC gesendet) in einer Textbox angezeigt wird.
Jetzt möchte ich den in einer 2ten Textbox eingetragenen Wert mit dem Digitalwert vergleichen.
Wenn der Digitalwert maximal +/- 0,5% vom eingegebenen Wert abweicht soll sich die Textbox grün färben,
andernfalls rot.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text == txbRaw.Text)
            {
                txbRaw.BackColor = System.Drawing.Color.Green;
            }
            else
            {
                txbRaw.BackColor = System.Drawing.Color.Red;
            }


Selbst wenn der Wert gleich ist färbt sich die Textbox nicht grün

ich hoffe Ihr könnt mir helfen.
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: Sa 23.02.13 11:35 
Hallo und :welcome:

bei Textvergleichen muß exakt jedes Zeichen übereinstimmen (auch Leerzeichen o.ä. zählen dazu).
Da du aber mit Zahlenwerten rechnen willst, solltest du mal nach der statischen Methode TryParse suchen (es gibt dazu einige Beispiel hier im Forum). Je nachdem welchen Datentyp du benutzt, also int, double oder decimal, z.B. int.TryParse(...) (oder auch als .NET-Klasse Int32.TryParse(...)).

Und um den Absolutwert zu vergleichen kannst du die statische Methode Math.Abs benutzen (damit du nicht zwei Abfragen für + und - machen mußt).

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



BeitragVerfasst: Sa 23.02.13 17:06 
Schonmal vielen Dank :zustimm:
Habe das ganze wie folgt gelöst:
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:
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string soll = textBox1.Text;
            string ist = txbRaw.Text;
            int istint;
            int sollint;
            bool parsed = Int32.TryParse(soll, out sollint);
            bool parsed2 = Int32.TryParse(ist, out istint);

            if (sollint <= istint*1.5 && sollint >= istint*0.5)
            {
                txbRaw.BackColor = System.Drawing.Color.Green;
            }
            else
            {
                txbRaw.BackColor = System.Drawing.Color.Red;
            }
        }

    }

}


Soweit klappts auch, nur das ich den Wert bei jeder Abfrage neu eingeben muss.
Das Programm soll aber sobald sich der Digitalwert (0-1023) ändert vergleichen.
soll = der Wert der per Hand eingetragen wird.
ist = der Digitalwert
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: So 24.02.13 11:08 
Hallo Heddi,

dann mußt du auch für die andere TextBox das TextChanged-Ereignis abonnieren:
ausblenden C#-Quelltext
1:
txbRaw.TextChanged += textBox1_TextChanged;					

(entweder im Konstruktor aufrufen oder aber im Designer für txbRaw bei der Eigenschaft 'TextChanged' die Liste aufklappen und 'textBox1_TextChanged' auswählen).

So wird bei jeder Änderung (egal in welcher TextBox) deine Methode aufgerufen.

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



BeitragVerfasst: So 24.02.13 12:49 
Hallo Th69,

vielen Dank für dein Hilfe :)

So sieht der Quelltext nun aus und funktioniert ohne Probleme:
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:
24:
        private void txbRaw_TextChanged(object sender, EventArgs e)
        {
            txbRaw.TextChanged += textBox1_TextChanged;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string soll = textBox1.Text;
            string ist = txbRaw.Text;
            int istint;
            int sollint;
            bool parsed = Int32.TryParse(soll, out sollint);
            bool parsed2 = Int32.TryParse(ist, out istint);

                if (sollint <= istint * 1.5 && sollint >= istint * 0.5)
                {
                    txbRaw.BackColor = System.Drawing.Color.Green;
                }
                else
                {
                    txbRaw.BackColor = System.Drawing.Color.Red;
                }
            
        }
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: So 24.02.13 13:34 
Hallo Heddi,

das hast du wohl falsch verstanden.
Den Code solltest du im Konstruktor deiner Form aufrufen. So wie du es jetzt hast, wird jedesmal das Ereignis abonniert und das bedeutet, daß deine Ereignis-Methode dann mehrmals ausgeführt werden würde (also irgendwann sehr langsam wird...).
Heddi Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 24.02.13 15:01 
Hallo Th69,

meinst du das so? :

ausblenden C#-Quelltext
1:
2:
3:
4:
        public txbRaw1()
        {
            txbRaw.TextChanged += textBox1_TextChanged;
        }


ausblenden C#-Quelltext
1:
2:
3:
4:
        private void txbRaw_TextChanged(object sender, EventArgs e)
        {
            txbRaw1();
        }
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: So 24.02.13 15:10 
Hallo Heddi,

nein, im Konstruktor, also in
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public partial class MyForm : Form
{
        public MyForm()
        {
            InitializeComponent();

            txbRaw.TextChanged += textBox1_TextChanged;
        }
}

(oder wie auch immer deine Form-Klasse heißt ;-))

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



BeitragVerfasst: So 24.02.13 18:45 
Hallo Th69,

ach so war das gemeint. Da hat sich wohl ein Denkfehler eingeschlichen :D.

Vielen Dank für deine Hilfe :zustimm: :zustimm: