Laden...

TextBox mit Enter ausführen

Erstellt von hoppel vor 17 Jahren Letzter Beitrag vor 10 Jahren 43.271 Views
Thema geschlossen
H
hoppel Themenstarter:in
23 Beiträge seit 2006
vor 17 Jahren
TextBox mit Enter ausführen

Hallo!
Wie Ihr seht, ist dies mein erster Beitrag.

Achtung ich bin Anfänger!

Ich möchte, das man mit der Taste "ENTER" die Berechnung ausführt.
Das habe ich zwar über den Eintrag "AcceptButton = button1" erreicht, ist aber nicht die beste Lösung.
Ich habe gelesen, das es auch über den Event "KeyPress" gehen muss, aber das bekomme ich nicht hin.
Kann jemand den kompletten Quelltext hir abbilden, wo der Event enthalten ist?
Ich habe VS2003, dort kann ich es nicht auswählen.
Danke.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            double dFahrenheit = Convert.ToDouble(textBox1.Text);
            double dCelsius = (dFahrenheit - 32) * 5.0 / 9.0;

            textBox2.Text = dCelsius.ToString("F");
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            AcceptButton = button1;
        }
    }
}

N
4.644 Beiträge seit 2004
vor 17 Jahren

Hast Du schonmal due Suche benutzt?
Bitte auch Wie poste ich richtig? beachten.

871 Beiträge seit 2005
vor 17 Jahren

Hallo,

im einfachsten fall machst Du das so:



        private void textBox1_KeyDown( object sender, KeyEventArgs e )
        {
            if( e.KeyCode == Keys.Enter )
            {
                // Tu was
            }
        }

Das Keydown event musst du natürlich vorher subscribed haben.

Grüsse, Egon

H
hoppel Themenstarter:in
23 Beiträge seit 2006
vor 17 Jahren

Hallo Noodles,
ich suche bereits über eine Woche im WWW und ich habe bisher mein kleines Problem nicht lösen können.

Hallo egrath,
danke für Deine Antwort:

Das Keydown event musst du natürlich vorher subscribed haben

Genau da liegt mein Problem, unter VB kann ich diesen KeyDown event auswählen. Aber unter C# steht dieser event nicht zur Verfügung.

871 Beiträge seit 2005
vor 17 Jahren

Hallo hoppe,

normalerweise müsstest Du das Event unter den Event-Properties im Designer finden (siehe Screenshot).

Kannst es aber natürlich auch "händisch" subscriben:


textBox1.KeyDown += new KeyEventHandler( textBox1_KeyDown );

Grüsse, Egon

H
hoppel Themenstarter:in
23 Beiträge seit 2006
vor 17 Jahren

DANKE egrath!
Es funktioniert.

Aber ich habe da noch ein Problem. Mein Quelltext sieht zurzeit so aus:


private void button1_Click(object sender, EventArgs e)
        {
            double dFahrenheit = Convert.ToDouble(textBox1.Text);
            double dCelsius = (dFahrenheit - 32) * 5.0 / 9.0;

            textBox2.Text = dCelsius.ToString("F");
         
        }
                       
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
                        
            if (e.KeyCode == Keys.Enter)
            {
                double dFahrenheit = Convert.ToDouble(textBox1.Text);
                double dCelsius = (dFahrenheit - 32) * 5.0 / 9.0;

                textBox2.Text = dCelsius.ToString("F");
            }

Da ist die Berechnung doppelt.
Es muss doch einen einfacheren Weg geben, damit das Ergebnis mit der "Enter Taste" oder mit dem "Button" ausgegeben werden kann.
Kann mir jemand diesen Weg mal zeigen? Danke.

C
51 Beiträge seit 2006
vor 17 Jahren

Hi. Du kannst das abkürzn indem du eine eigene Funktion baust.

Einfacher geht's so nicht aber es ist übersichtlicher.


// Gibt für einen Fahrenheit Wert den entsprechenden Celsius Wert zurück
private double Fahrenheit2Celsius(double dFahrenheit)
{
      return (dFahrenheit - 32) * 5 / 9;
}

// Schreibt den Celsius Wert von dFahrenheit in textBox2
private void CelsiusAusgeben(double dFahrenheit)
{
      textBox2.Text = Fahrenheit2Celsius(Convert.ToDouble(textBox1.Text)).ToString("F");
}

private void button1_Click(object sender, EventArgs e)
{
      CelsiusAusgeben();
}
                      
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{                   
      if (e.KeyCode == Keys.Enter)
      {
            CelsiusAusgeben();
      }
}

H
hoppel Themenstarter:in
23 Beiträge seit 2006
vor 17 Jahren

DANKE an alle, es funktioniert einwandfrei.

A
6 Beiträge seit 2013
vor 10 Jahren

Ich habe genau dasselbe Problem, wenn ich mein Enter-Taste betätige wird der Wert in der TextBox gelöscht bevor die Rechnung stattfindet.

textBox1.KeyDown += new KeyEventHandler( textBox1_KeyDown ); 

Wo genau muss ich das eintragen.

Könnt ihr mir auch helfen.

T
156 Beiträge seit 2012
vor 10 Jahren

Hallo Aydogan61,

wenn du das KeyDown-Event über den VisualStudio-Designer abonnierst wird der Eintrag automatisch in der entsprechenden *.Designer.cs eingetragen.
Ansonsten kannst du diese Zeile auch im Creator der entsprechenden Class unterbringen.

In beiden Fällen ist gewährleistet das die Zeile auch verarbeitet wird.

Viele Grüße,
telfa

A
6 Beiträge seit 2013
vor 10 Jahren

Hallo telfa,

vielen Dank für deinen schnellen Antwort. Leider funktioniert es bei mir nicht. Ich verstehe nicht warum das nicht funktioniert. Simple Rechenfunktion, der Wert wird in die TextBox eingegeben, nach Betätigung des Enter-Taste soll der Programm das ausrechnen. Aber mit dem Enter-Taste funktioniert es nicht. Aber mit dem Button funktioniert es einbahnfrei. Wenn ich nach dem Button Betätigung einen zweiten Rechnung starte und Wert eingebe nimmt er die Werte aus dem letzten Rechnung wo ich das mit den Button durchgeführt habe. Irgendwie nimmt der Enter-Taste die eingegebenen Werte nicht an.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Aydogan61,

da wirst du dir die alten Werte wohl noch irgendwo gemerkt haben und nicht aktuell aus der TextBox holen. Spätestens im Debugger (siehe [Artikel] Debugger: Wie verwende ich den von Visual Studio? sollte der Fehler leicht zu finden sein.

Der AcceptButton ist übrigens durchaus eine gute Lösung. Ich würde ihn der direkten Behandlung von Enter - wo immer möglich - sogar vorziehen.

2007 gab es [Hinweis] Wie poste ich richtig? Punkt 1.1.1 noch nicht, jetzt aber schon.

herbivore

Thema geschlossen