C# If Bedindung umschreiben

Magixx87

Cadet 1st Year
Registriert
Juni 2009
Beiträge
9
Hallo Leute, ich habe versucht in einer Textbox nur numerische Werte eintragen zu lassen, sodass falls es doch passiert eine Fehlermeldung aufgeht.

Gesagt getan:

Code:
   private void textBoxArtikelNr_TextChanged(object sender, EventArgs e)
        {
            string stringValue = textBoxArtikelNr.Text;
            double doubleValue;
            if (!Double.TryParse(stringValue, NumberStyles.Float, CultureInfo.CurrentCulture, out doubleValue))
            {
                MessageBox.Show("Sie haben versucht, Zeichenwerte in das Feld einzufügen, \nBitte korrigieren sie ihre Eingabe!", "Falsche Eingabe");
            }
        }



Problem:

Wenn ich nun einen Listbox eintrag lösche, überschreibt er mir alle Textbox Felder mit "null" was natürlich auch kein numerischer Wert ist, und er so die Fehlermeldung nochmal für jedes Feld einzeln aufruft.

Habt ihr eine Möglichkeit dieses in die IF Bedingung mit einzubetten, sodass auch null Werte zugelassen werden?

Ich danke für eine Antowort!
 
Moin,

ich würde hier mal vorschlagen, von Anfang an für die Eingabefehler nur Nummern zulassen, also bereits bei der Eingabe "prüfen" und nicht erst später.

Wie dies bei C# genau geht weiß ich nicht, aber da wird sich schon jemand finden.

Gruß,

badday
 
Er prüft bereits bei der Eingabe , also wenn Werte in die Textbox geschrieben werden....


Ich möchte nur verhindern wenn gelöscht wird, also die Textboxen mit "null" beschrieben werden, dass die Fehlermeldung nicht x mal auftritt, weil ja "null" kein numerischer Wert ist.

Also benötie ich eigentlich nur den Hinweis der Syntax, wo ich ebenfalls Null als zulässigen Wert deklarieren kann.
 
Den Text der Textbox nicht auf null sondern "" setzen.

Dann:
Code:
   private void textBoxArtikelNr_TextChanged(object sender, EventArgs e)
        {
            string stringValue = textBoxArtikelNr.Text;
            double doubleValue;
            if (!Double.TryParse(stringValue, NumberStyles.Float, CultureInfo.CurrentCulture, out doubleValue) && !stringValue.IsEmpty())
            {
                MessageBox.Show("Sie haben versucht, Zeichenwerte in das Feld einzufügen, \nBitte korrigieren sie ihre Eingabe!", "Falsche Eingabe");
            }
        }

Ich hab´s jetzt nicht getestet, aber vom Prinzip her müsste es gehen. Ich weiß jetzt auch nicht, ob null "" entspricht, also evtl. könntest du es auch nullen.
 
Danke für den Support, aber es scheint nicht ganz so zu laufen, wie du es dir vorgestellt hast.

Im Prinzip haste recht dass es mit IsEmpty gehen sollte , er meckert aber ein wenig.

Habe probiert den Wert IsEmpty nochmal als null zu deklarieren aber ebenfalls ohne Erfolg.

Hier die Fehlermeldung:

Code:
Fehler	1	"string" enthält keine Definition für "IsEmpty", und es konnte keine Erweiterungsmethode "IsEmpty" gefunden werden, die ein erstes Argument vom Typ "string" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)	C:\Dokumente und Einstellungen\Administrator\Desktop\Auftragsverwaltung_Alexander_Füller\Auftragsverwaltung\Auftragsverwaltung.cs	438	128	Auftragsverwaltung
 
Öhm String.IsEmpty() ist eine Funktion die zurückgibt, ob der String leer ist oder nicht. Das kann man nicht mit null überschreiben.
 
fehlt mir evtl eine weitere Bibliothek, welche IsEmpty() akteptiert?

diese sind bereits verwendet:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using Auftragsverwaltung.Classes;
using System.Globalization;
 
Habe ich gemacht .... wenn du magst sende ich dir die Datei auch kurz rüber. Sende mir dochmal schnell deine EMail via PN damit wir hier nicht allzuviel Aufwand betreiben, wenn du magst.

Danke :D
 
Also ich habe zwar keine Ahnung wie das Programm funktionieren soll, wie man es bedienen soll und was es genau macht, aber ich würde das jetzt so machen:

Code:
        private void textBoxArtikelNr_TextChanged(object sender, EventArgs e)
        {
            if (textBoxArtikelNr.Text != String.Empty)
            {
                string stringValue = textBoxArtikelNr.Text;
                double doubleValue;
                if (!Double.TryParse(stringValue, NumberStyles.Float, CultureInfo.CurrentCulture, out doubleValue))
                {
                    MessageBox.Show("Sie haben versucht, Zeichenwerte in das Feld einzufügen, \nBitte korrigieren sie ihre Eingabe!", "Falsche Eingabe");
                }
            }
        }

String.IsEmpty() gibt es nur bei Java, dass habe ich vertauscht. Man kann aber auch String.Empty verwenden als vergleichbare Referenz eines leeren Strings.

Teste es mal, ich weiß nicht unter welchen Bedingungen dein Fehler auftritt.
 
es wird in c# doch auch ein ereignis onKeyPress() o.ä. geben? OnTextChanged() tritt nämlich erst auf, nachdem die eingabe geprüft und ins feld eingetragen wurde (sollte theoretisch so sein).
 
nene, ihr müsst das anders verstehen ... ich habe ein Textbox wo mal die artikelnummer eingetragen werden soll. So, nun tragen wir aber einen anderen Wert , als numerische Werte ein, und er spuckt eine Fehlermeldung aus .... alles prima! Nun ist allerdings das Problem, wenn z.B sich bei der Artikelnummer jemand vertippt hat, kann man den kompletten Auftrag /zusammenführung von mehreren Textbox Inhalten in einer Listbox) komplett aus der Listbox und den Textbox feldern löschen. Das löschen habe ich mit einem Überschreiben der Textboxen mit null werten in die Wege geleitet.

Dadurch, dass in dem Code aber nicht aufgeführt ist, dass null werte natürlich auch keine numerischen werte sind, generiert er mir beim Löschvorgang x mal die Fehlermeldung, von der Anzahl der Textbox felder in der jeweiligen Groupbox. Also wer mir sagen kann wie ich es einrichte, dass er bei Null werten nicht meckert beim löschvorgang der hat sich bei diesem Wetter ein Eis verdient :D

@ Mephisto .... nun gibt er mir keine Fehlermeldung mehr, wenn ich buchstaben eintrage.
 
Bei mir funktioniert es einwandfrei.
Hast es nicht überschrieben oder so.
 
Für solche Sachen gibts doch extra die MaskedTextbox. Ich weiß zwar nicht wie deine Artikelnummern ausschauen, aber ich denke damit fährst du am besten.

Oder du machst es so wie Claw schon geschrieben hat, du benutzt das KeyPress Event:

PHP:
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            int result;
            if (!int.TryParse(e.KeyChar.ToString(), out result))
            {
                e.Handled = true;
            }
        }

So sollte das klappen.
Wenn was anderes eingegeben wird, als eine Zahl, dann wird die 'Handled' Property auf true gesetzt und dadurch erscheint die Eingabe garnicht erst in der Textbox.
 
Von dem Event wusste ich garnichts, so geht das natürlich einfacher/schneller/besser....
 
Richtig dafür gedacht ist jedoch das Validating-Event.
PHP:
private void textBox1_Validating(object sender, CancelEventArgs e) {
  try {
    int.Parse(textBox1.Text);
  }
  catch {
    MessageBox.Show("Fehler");
    e.Cancel = true;
  }
}
 
Für solche Sachen gibts doch extra die MaskedTextbox. Ich weiß zwar nicht wie deine Artikelnummern ausschauen, aber ich denke damit fährst du am besten.

Hallo,

also daran hab ich beim Lesen auch gedacht. Es müsste in C# ein Grafischen Element geben, welches nur numerische Eingaben und auch nur einen bestimmten Wertebereich aktzeptiert. Das sieht aus wie eine einzeilige Textbox und hat an der Seite zwei Pfeile mit denen man den Wert (Default Wert) des Feldes um 1 erhöhen bzw. verkleinern kann.

Ich würde eine Textbox für "Text" mit dem Datentyp String wenn möglich nicht durch selbst geschriebenen Code parsen. Das erhöht zum einen die Code Basis und ist wohl auch Fehleranfällig. Ausserdem ist eine Textbox für ausschließlich nummerische (Integer) Werte nicht gedacht und es ist auch nicht so gut, wenn es bei einer grafischen Oberfläche Möglichkeiten gibt, um eine Fehlermeldung auszulösen.

Gruß

Tikonteroga
 
Mh, bin mir ned sicher ob du einen Witz machen moechtest, ich finde deinen Post ein bissle Trollig. sry, is ned boes gemeint, denoch wirkt dein post so

Tikonteroga schrieb:
Es müsste in C# ein Grafischen Element geben, welches nur numerische Eingaben und auch nur einen bestimmten Wertebereich aktzeptiert. Das sieht aus wie eine einzeilige Textbox und hat an der Seite zwei Pfeile mit denen man den Wert (Default Wert) des Feldes um 1 erhöhen bzw. verkleinern kann.

So ein Control gibt es der Name ist "NumericUpDown",Rueckgabewert ist ein Decimalwert.

Tikonteroga schrieb:
Ich würde eine Textbox für "Text" mit dem Datentyp String wenn möglich nicht durch selbst geschriebenen Code parsen. Das erhöht zum einen die Code Basis und ist wohl auch Fehleranfällig. Ausserdem ist eine Textbox für ausschließlich nummerische (Integer) Werte nicht gedacht und es ist auch nicht so gut, wenn es bei einer grafischen Oberfläche Möglichkeiten gibt, um eine Fehlermeldung auszulösen.

Warum den nicht? Genau dafuer gibt es doch Methoden wie "int.TryParse"
und diese unzaehligen Events zur Validierung, fuer was sind die wohl?

Die Textbox ist (In erster Linie) ein Eingabecontrol, der User kann/soll alles da eingeben koennen. -> Die Implementierung entscheidet ob das eingebene ok ist oder verworfen wird

Und da ist auch nicht mehr fehleranfaellig, sauber implementieren/testen. (Im idealfall erst testfaelle schreiben und dann implementieren).

EDIT:
Sollte dir beim NumericUpDown der Rueckgabewert decimal misfallen.
Schreibe ein neue Control, oder (ist vermutlich schneller) Beerbe das Bestehende NumericUpDown und ueberlade das Property
 
Zuletzt bearbeitet:
wozu gibt es den ErrorProvider? hab den noch nicht ausprobiert aber vielleicht hauts hin ;)
 
Zurück
Oben