2013-02-25 7 views
5

Sono nuovo a .Net Framework e voglio aggiungere convalide alla mia domanda di modulo Windows in Visual Studio 2010 IDE. Ho cercato diversi modi per farlo, ma non sono sicuro di dove posso aggiungere quel codice nel mio modulo? Uno degli esempi è il seguente codice.Convalidare il mio modulo

Aggiungo questo codice sul metodo di caricamento modulo o sul pulsante di invio o da qualche altra parte?

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

Credo che dipende il caso d'uso qui. Se si desidera che tutte le convalide appaiano o agiscano durante il caricamento del modulo, quindi eventi OnLoad o OnShown. – Zenwalker

+0

Si sta tentando di implementare in modo ASP.Net MVC. Controlla come può essere fatto nei moduli di Windows –

+0

Non desidero usare asp.net ma una semplice implementazione usando C#. Come posso aggiungere convalide sulle caselle di testo per assicurarmi che l'utente inserisca solo alfabeti e un'altra casella di testo per il numero di telefono che accetta solo numeri e "+", "-" dall'utente? –

risposta

1

provare a creare un personalizzato TextBox con una proprietà pubblica di ControlType (come il numero, testo) e tutti e quindi scrivere la realizzazione per ogni tipo. Esempio di codice indicato di seguito.

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, 
} 

Costruisci la soluzione. Seleziona il controllo appena creato da Toolbox. Trascina il modulo e modifica la proprietà ControlType da Property Window. L'esempio mostra solo numero e testo ma puoi estendere le cose per Telefono, e-mail e tutto.

Modifica

può anche un tag di default in enum che lo renderà un normale Textbox. In questo caso, non dimenticare di cancellare gli eventi.

Spero che aiuti.

+0

Non sono riuscito a trovare la proprietà ControlType nella finestra delle proprietà. –

+0

Crea la tua soluzione una volta che sei in forma. – Sandy

+0

Ho già, ma non riesco ancora a vederlo. Puoi approfondire dove esattamente nelle proprietà? –

0

penso che si shoud utilizza l'interfaccia IDataErrorInfo (vedi here)

Here è un esempio di come implementare lo

E 'più o meno così:

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"; 
      } 
     } 

}