2013-02-25 5 views
5

Ich bin neu in .Net Framework und ich möchte Validierungen meiner Windows-Formularanwendung in Visual Studio 2010 IDE hinzufügen. Ich habe nach verschiedenen Möglichkeiten gesucht, aber ich bin mir nicht sicher, wo kann ich diesen Code in meinem Formular hinzufügen? Eines der Beispiele ist der folgende Code.Validierung meines Formulars

Füge ich diesen Code in Formular laden Methode oder auf Senden oder woanders?

using System; 
using System.Data.Entity; 
using System.ComponentModel.DataAnnotations; 

namespace MvcMovie.Models 
{ 
    public class Movie 
    { 
     public int ID { get; set; } 

     [Required(ErrorMessage = "Title is required")] 
     public string Title { get; set; } 

     [Required(ErrorMessage = "Date is required")] 
     public DateTime ReleaseDate { get; set; } 

     [Required(ErrorMessage = "Genre must be specified")] 
     public string Genre { get; set; } 

     [Required(ErrorMessage = "Price Required")] 
     [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")] 
     public decimal Price { get; set; } 

     [StringLength(5)] 
     public string Rating { get; set; } 
    } 

    public class MovieDBContext : DbContext 
    { 
     public DbSet<Movie> Movies { get; set; } 
    } 
} 
+0

Ich denke, es hängt davon ab, Der Anwendungsfall hier. Wenn Sie möchten, dass alle Validierungen beim Laden des Formulars angezeigt werden oder darauf reagieren, dann OnLoad- oder OnShown-Ereignisse. – Zenwalker

+0

Sie versuchen, in ASP.Net MVC Weg zu implementieren. Überprüfen Sie, wie in Windows-Forms –

+0

getan werden kann Ich möchte nicht asp.net verwenden, sondern eine einfache Implementierung mit C#. Wie kann ich Validierungen in Textfeldern hinzufügen, um sicherzustellen, dass Benutzer nur Alphabete eingeben und ein anderes Textfeld für Telefonnummern, die nur Zahlen und '+', '-' vom Benutzer akzeptieren? –

Antwort

1

versuchen, einen benutzerdefinierten TextBox mit öffentlichem Eigentum ControlType (wie Zahl, Text) und alle zu schaffen und dann Ihre Implementierung für jede Art schreiben. Codebeispiel unten angegeben.

class CustomTextbox : TextBox 
{ 
    private ControlType _controlType; 

    public CustomTextbox() 
    { 
     Controltype = ControlType.Number; 
    } 

    public ControlType Controltype 
    { 
     get { return _controlType; } 
     set 
     { 
      switch (value) 
      { 
       case ControlType.Number: 
        KeyPress += textboxNumberic_KeyPress; 
        MaxLength = 13; 
        break; 

       case ControlType.Text: 
        KeyPress += TextboxTextKeyPress; 
        MaxLength = 100; 
        break; 
      } 
      _controlType = value; 
     } 
    } 

    private void textboxNumberic_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     const char delete = (char)8; 
     const char plus = (char)43; 
     e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != delete && e.KeyChar != plus; 
    } 

    private void TextboxTextKeyPress(object sender, KeyPressEventArgs e) 
    { 
     const char delete = (char)8; 
     const char plus = (char)43; 
     e.Handled = Char.IsDigit(e.KeyChar); 
    } 

} 

public enum ControlType 
{ 
    Number, 
    Text, 
} 

Erstellen Sie Ihre Lösung. Wählen Sie das neu erstellte Steuerelement aus Toolbox. Ziehen Sie das Formular und ändern Sie dann die ControlType Eigenschaft von Property Window. Beispiel zeigt nur Nummer und Text, aber Sie können die Dinge für Telefon, E-Mail und alle erweitern.

bearbeiten

Kann ein Standard-Tag in Enum auch das es eine normale Textbox machen. Vergessen Sie in diesem Fall nicht, die Ereignisse zu löschen.

Ich hoffe, es hilft.

+0

Ich konnte ControlType-Eigenschaft im Eigenschaftenfenster nicht finden. –

+0

Erstellen Sie Ihre Lösung, sobald Sie im Formularentwurf sind. – Sandy

+0

habe ich schon, aber ich kann es immer noch nicht sehen. Kannst du herausfinden, wo genau in Immobilien? –

0

Ich glaube, Sie shoud die IDataErrorInfo Schnittstelle verwenden (siehe here)

Here ist ein Beispiel dafür, wie Sie es implementieren

Es geht ungefähr so:

public class Movie : IDataErrorInfo 
{ 
    public int ID { get; set; } 

    //other properties removed for clearyfication 

     private string _lastError = ""; 

     public string Error 
     { 
      get { return _lastError; } 
     } 

     public string this[string columnName] 
     { 
      get 
      { 
       if(columnName == "ID" && ID < 0) 
       _lastError = "Id must be bigger that zero"; 
      } 
     } 

} 
Verwandte Themen