Hallo,
folgende Frage:
Ich habe eine Form zum Hinzufügen von Kategorien, bestehend aus einer textbox, einem Speichern und einem Abbrechen Button. Mein Exeption Handler bearbeitet die fehlerhafte Speicherung in der Datanbank. Was ich jetzt noch brauche ist ein handler für das textfeld, also das darf nicht leer sein und wenn doch und man klickt auf speichern soll eine Nachricht kommen das das textfeld ausgefüllt werden muss.
Hier meine Code !
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using PriceList.Data;
using PriceList.helper;
namespace PriceList
{
/// <summary>
/// Summary description for NewCat.
/// </summary>
public class NewCat : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button saveButton;
private System.Windows.Forms.Button button1;
private System.ComponentModel.IContainer components;
private System.Windows.Forms.ToolTip toolTip1;
private TreeView treeView1;
public NewCat( TreeView treeView1 )
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
this.treeView1 = treeView1;
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(NewCat));
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.saveButton = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(120, 32);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 0;
this.textBox1.Text = "";
//
// label1
//
this.label1.Location = new System.Drawing.Point(16, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(312, 23);
this.label1.TabIndex = 1;
this.label1.Text = " Bitte geben Sie einen Namen für die neue Kategorie ein.";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// saveButton
//
this.saveButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.saveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.saveButton.Location = new System.Drawing.Point(56, 80);
this.saveButton.Name = "saveButton";
this.saveButton.TabIndex = 2;
this.saveButton.Text = "Speichern";
this.saveButton.Click += new System.EventHandler(this.Save_Click);
//
// button1
//
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Location = new System.Drawing.Point(200, 80);
this.button1.Name = "button1";
this.button1.TabIndex = 3;
this.button1.Text = "Abbrechen";
this.button1.Click += new System.EventHandler(this.Close_Click);
//
// NewCat
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(342, 116);
this.Controls.Add(this.button1);
this.Controls.Add(this.saveButton);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "NewCat";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Neu anlegen";
this.Load += new System.EventHandler(this.NewCat_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Save new Cat in treeView
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Save_Click(object sender, System.EventArgs e)
{
try
{
int type;
if (this.treeView1.SelectedNode.Parent!=null)
type=((MyTreeNode)this.treeView1.SelectedNode.Parent).id;
else
type=((MyTreeNode)this.treeView1.SelectedNode).id;
Common.AddElementToCategories(this.textBox1.Text,type);
}
catch (Exception ex)
{
MessageBox.Show("Es ist ein Fehler beim hinzufügen aufgetreten:nn","Fehler in CategoriesForm.cs - buttonNewCategory_Click()",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
private void Close_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void NewCat_Load(object sender, System.EventArgs e)
{
}
}
}
Kann jeman helfen 8)
Gruss
Stefan
Cod-Hacker:
Ich habe zur besseren Übersicht mal den BB Code für Code eingefügt.
Also falls ich dein Problem richtig verstanden habe brauchst du in deiner Funktion Save_Click nur eine if(textBox1.Text != "") Bedingung einbauen und bei else eben deine Message Box. Vielleicht kennt jemand ja auch einen Befehl der die weitere Bearbeitung der Funktion abbricht (dann hat man nicht soviele Klammern). Auf jedenfall wird man eine Meldung bekommen wenn man auf Speichern klickt und nichts in der Textbox steht.
Also mein Vorschlag:
private void Save_Click(object sender, System.EventArgs e)
{
if(textBox1.Text != "")
{
try
{
int type;
if (this.treeView1.SelectedNode.Parent!=null)
type=((MyTreeNode)this.treeView1.SelectedNode.Parent).id;
else
type=((MyTreeNode)this.treeView1.SelectedNode).id;
Common.AddElementToCategories(this.textBox1.Text,type);
}
catch (Exception ex)
{
MessageBox.Show("Es ist ein Fehler beim hinzufügen aufgetreten:nn","Fehler in CategoriesForm.cs - buttonNewCategory_Click()",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Das Textfeld wurde nocht ausgefüllt","Fehler");
}
}
Hi, habe mir mal nen neuen Namen zugelegt weil ich jetzt hier Stammgast bin und was cooles brauche ! 😁
Also danke erstmal und ich hab ausprobiert. geht auch. Aber ! Wenn ich bei der Error Box dann auf OK klicke geht sowohl die Box als auch die Eingabeform zu. Wie kann ich das letztere verhindern. Also so das nur die msg Box zu geht?
Gruss
Ja, genau wie raptor habe ich es bei Message Send gelöst. Aber und das werde ich auch noch überarbeiten ist nur indirekt richtig. Ich finde es sollte auch nicht funktionieren, wenn der Text KEIN >gültiges> ASCII-Zeichen enthält, sprich nur Leerzeichen g. Du solltest also alles Auslesen, die Länge prüfen und auf ungleich Leerzeichen überprüfen.
Catch bricht alles ab. Bei mir bricht es in Message Send nur den Versuch des Versenden ab. Du benutzt es ja direkt in der Form. du müsstest also neu starten. Sprich, wenn der Fehler true ist dann soll er neu starten. Ich weiß jetzt nicht ob man die exeption ex überprüfen kann bzw. wie man es tun soll, aber ich habe es mit einer variable gemacht die zuvor auf false und in der catch anweisung zu true gesetzt wird. Aber mir ex geht das denke ich auch irgendwie. Musst du nur in der Methode am Ende mal mit if prüfen und bei true neu starten, die Form.
Code-Hacker
ICh weiss jetzt nicht ganz, aber du hast bei der catch (Exception ex) geschrieben, aber in der MessageBox liest du die Fehlermeldung nicht aus?
das geht ja mit ex.message.
Wenn du sagst die Form schliesst sich nachher, dann hast du doch irgendwo this.Close() oder etwas ind er art gemacht, und das nachdem die Textbox überprüft wird, wenn du jetzt in der else die MessageBox ausgibst und danach dann mit breack; beendest, dann würde der ganze code abgebrochen werden und kert auf die Form zurück ohne das die Form geschlossen werden würde.
Grüsschen Andreas
Da ist ja aber nichts im Code was die Form schließt. Mit dem Schlüsselwort throw kann man eine Ausnahme erneut auslösen, dabei wird allerdings nach einer weiteren catch-Klausel gesucht. Das wird solange wiederholt bis die Ausnahme behandelt wurde bzw. bis alle Methoden im Aufrufstapel die Gelegenheit hatten, die Ausnahme zu behandeln, Wenn keine geeignte Behandlungsroutine für die Ausnahme gefunden wird, dann wird der Thread wegen der unbehandelten Ausnahme beendet.
Das catch notfalls den Thread beendet, kanst du (xcoder (mist, jetzt muss ich mich umgewöhnen, Stefan konnte ich mir wenigstens merken g)) in dem Buch auf Seite 61, erster Absatz nachlesen.
Bedeutet also du musst etwas dafür sorgen das der Fehler behandelt wird. Wie Andreas aber schon sagte solltest du ihn dir ma in der MessageBox ausgeben lassen.
Code-Hacker