C# TextBox Temparatur Umrechner

oGuzee

Cadet 3rd Year
Registriert
Juli 2012
Beiträge
45
Hey Leute,

ich habe ein kleines Problem mit meiner Anwendung.

Hier der Code:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KLAUSUR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

            Umrechnung beta = new Umrechnung();
            beta.wert_celsius = Convert.ToDouble(textBox1.Text);
            beta.wert_kelvin = beta.wert_celsius + 273.15;
            beta.wert_fahrenheit = (beta.wert_celsius - 32) * 1.8;
            textBox2.Text = Convert.ToString(beta.wert_kelvin);
            textBox3.Text = Convert.ToString(beta.wert_fahrenheit);
           
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {         
  
                Umrechnung teta = new Umrechnung();
                teta.wert_kelvin = Convert.ToDouble(textBox2.Text);
                teta.wert_celsius = teta.wert_kelvin + 273.15;
                teta.wert_fahrenheit = (teta.wert_kelvin + 459.67) / 1.8;
                textBox1.Text = Convert.ToString(teta.wert_celsius);
                textBox3.Text = Convert.ToString(teta.wert_fahrenheit);

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

                Umrechnung alpha = new Umrechnung();
                alpha.wert_fahrenheit = Convert.ToDouble(textBox3.Text);
                alpha.wert_celsius = (alpha.wert_fahrenheit - 32) / 1.8;
                alpha.wert_kelvin = (alpha.wert_fahrenheit + 459.67) / 1.8;
                textBox1.Text = Convert.ToString(alpha.wert_celsius);
                textBox2.Text = Convert.ToString(alpha.wert_kelvin);

        }
    }
}

Problem ist folgendes: Einzeln, also wenn die anderen beiden voids ausgeklammert sind, funktioniert alles. Wenn aber alle drei gleichzeitig debugged werden stürzt das Programm ab. Ich weiß auch schon wieso, da es in TextBoxes rein soll werden diese immer wieder neu beschrieben sobald ich bei einer der 3 Boxen irgendetwas eingebe. Ich habe also eine unendlichschleife.
Das will ich aber nicht (ist logisch). Was ist will ist: das in Echtzeit alles so ausgerechnet wird, egal was ich in welche Box schreibe.


Könnt Ihr mir dabei helfen?

Danke
 
Hi,

verwende ein anderes Event! Nicht Changed sonder KeyUp oder ein beliebiges.

VG,
Mad
 
Also du meinst von
private void textBox1_TextChanged(object sender, EventArgs e)
In
private void textBox1_TextKeyUp(object sender, EventArgs e)
??


Wenn ja: Hat nichts gebracht. :D
 
oder du baust eine globale puffer-variable ein (oder eine statische variable in der umrechnung) die sich bei nem änderungs-event auf false setzt und dann weitere ausführungen verhindert. müsse dann halt bei jedem event direkt die frage kommen. und du solltest die danach wieder sinnig auf true setzen ;)
 
oGuzee schrieb:
Code:
       private bool _inProgress=false;

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (_inProgress)
                 return;
            _inProgress=true;

            Umrechnung beta = new Umrechnung();
            beta.wert_celsius = Convert.ToDouble(textBox1.Text);
            beta.wert_kelvin = beta.wert_celsius + 273.15;
            beta.wert_fahrenheit = (beta.wert_celsius - 32) * 1.8;
            textBox2.Text = Convert.ToString(beta.wert_kelvin);
            textBox3.Text = Convert.ToString(beta.wert_fahrenheit);
            
            _inProgress=false;           
        }

So etwa... (a la SoDaTierchen). Analog für den Rest.
 
Kleine Hilfestellung:

Du deklarierst dir eine private Variable, wie es SoDaTierchen beschrieben hat und in den Ereignismethoden kannst du diese über eine Bedingung (if/else) auswerten.

Code:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

         private bool m_calcInProgress = false;
         ...
}

Übrigens kann dein Code noch verbessert werden, indem du die Berechnung der Einheiten in die Klasse "Berechnung" auslagerst.
 
Danke, wollte es gerade schreiben :D siehe oben :)
 
Hi,

Also du meinst von
private void textBox1_TextChanged(object sender, EventArgs e)
In
private void textBox1_TextKeyUp(object sender, EventArgs e)

Nein! Das Event heißt nicht "TextKeyUp". Ein bisschen selber lesen und Eigeninitiative sind wohl zu viel verlangt...

VG,
Mad
 
Hey Leute,


Sry für die späte Nachricht.

Wollte mich noch einmal bedanken. Es hat alles so funktioniert wie erhofft.


Danke danke

Mfg - oGuzee
 
Zurück
Oben