Hallo zusammen,
da bin ich mal wieder mit einer neuen Frage.
Ich habe eine Modellklasse gemacht, die sich selber prüfen soll, ob alles vollständig ausgefüllt wurde und habe diese über die DataSource einer BindingSource an die Felder gebunden.
Nun ist ein Feld daraus (PLZ) ein numerisches Feld und ich würde gern den Benutzer "zwingen" eine Zahl einzugeben.
Im Moment muss man zwar schon eine Zahl eingeben, wenn man dies aber nicht tut, kann man das TextFeld nicht verlassen und auch nicht Das Form schließen.
Erst wenn die Property einen Zahlenwert erkennt, kann man die anderen Funktionen auch wieder nutzen. Selbst wenn man das Feld leert, kann man den Beenden button nicht drücken.
Doof ist halt auch, dass der Benutzer keine Meldung bekommt, was er falsch gemacht hat. (auch wenn es ja eindeutig sein sollte

)
Code der Modellklasse
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:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace Recycle.Logics { public class Recycler { public string Company { get; set; } public string Street { get; set; } public long? Postale { get; set; } public string City { get; set; }
public bool IsValid { get { return !string.IsNullOrWhiteSpace(Company) & !string.IsNullOrWhiteSpace(Street) & !string.IsNullOrWhiteSpace(City) & Postale.HasValue; } } } } |
Code des UserCOntrols
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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| namespace Recycle.Controls { public partial class RecyclerNeuUserControl : UserControl { long employee = 0;
public RecyclerNeuUserControl(long uebergabe) { InitializeComponent(); employee = uebergabe; }
private void RecyclerNeuUserControl_Load(object sender, EventArgs e) { txtFirmenname.Focus();
bsRecycler.DataSource = new Recycler(); }
private void btnSpeichern_Click(object sender, EventArgs e) { Recycler newRecycler = bsRecycler.DataSource as Recycler;
if (!newRecycler.IsValid) MsgAusgabe.ShowError("Bitte füllen Sie alle Felder aus!"); else { if (MsgAusgabe.AskQuestionYesNo("Wollen Sie diesen Regranulierer speichern?") == DialogResult.Yes) { if (RecyclerMethods.CheckRecycler(newRecycler) == 1) { MsgAusgabe.ShowError("Dieser Regranulierer exisitiert bereits!"); } else { RecyclerMethods.SetNewRecycler(newRecycler); MsgAusgabe.ShowInformation("Regranulierer erfolgreich gespeichert!"); MySqlHistorie.SetHistorie("Regranulierer", newRecycler.Company, "Angelegt", employee);
bsRecycler.DataSource = new Recycler(); txtFirmenname.Focus(); } } } } |
Weiterhin hatte ich es dann so probiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private void txtPLZ_TextChanged(object sender, EventArgs e) { long ausgabe; bool isNum;
if (txtPLZ.Text != string.Empty) { isNum = long.TryParse(txtPLZ.Text.Trim(), out ausgabe);
if (!isNum) { MsgAusgabe.ShowError("Bitte ausschließlich Zahlen erfassen!"); txtPLZ.Text = string.Empty; txtPLZ.Focus(); } } } |
Wie wäre der bessere Ansatz, dass der User auch über sein Fehlverhalten informiert wird und vorallem trotzdem, wenn er das Feld einmal angeklickt hat wieder zu einem anderen springen kann und nicht gezwungen ist eine Zahl einzugeben.
Danke
Gruß
P.S: Konsequent alles auf englisch zu benennen bekomm ich noch nicht ganz hin

Immer wieder flutscht es durch
