2008-11-19 9 views
5

Dzień dobry,walidacja tekstowe, koncentrują WYDANIE przełączania

pracuję nad aplikacji winform C#, który używa do kontroli poprawności. Problem, który mam, polega na tym, że gdy użytkownik kliknie w pole tekstowe i spróbuje kliknąć, sprawdzanie poprawności uruchamia i ponownie skupia kontrolę, w zasadzie użytkownik nie może kliknąć kontroli nad inną formantem.

Mój pożądany wynik to posiadanie WSZYSTKICH formantów w formularzu sprawdzania poprawności, gdy użytkownik kliknie przycisk przesyłania. Chciałbym, aby ikona errorProvider pojawiła się obok pól, w których wystąpił błąd, i pozwolić użytkownikowi na ich poprawienie według własnego uznania.

Moje pytanie brzmi: jak skonfigurować kontrolę, aby umożliwić użytkownikowi klikanie poza nią w przypadku wystąpienia błędu. Chciałbym, aby użytkownik mógł wypełnić resztę formularza i sam powrócić do błędu zamiast być zmuszonym do natychmiastowego rozwiązania problemu.

Z góry dziękuję za wszelką pomoc i poradę,

Odpowiedz

2

Najprostszym sposobem byłoby po prostu umieścić wszystkie walidacji w przycisk Prześlij obsługi, zamiast go w grupie kontrolnej.

-1

Istnieje właściwość (prawdopodobnie w formularzu), która umożliwia przechodzenie między polami, gdy sprawdzanie poprawności kończy się niepowodzeniem. Nie pamiętam, jak to się nazywa, ale myślę, że nazywa się to dość opisowo.

+0

Istnieje właściwość CausesValidation, którą, jak sądzę, ustawiłem w kontrolce docelowej - ale musisz ustawić ją na false dla * wszystkiego *. Prostsze, aby uniknąć całego mechanizmu, IMO. –

+0

Może to dlatego - aby być uczciwym, zwykle robimy naszą własną walidację kliknięć przyciskami ... –

2

mamy funkcję walidacji, która zwraca bool jeśli formularz jest ważny i ustawia wszystkie instytucje o błędach w postaci:

wygląda tak:

private void OnSave() 
    { 
     if(ValidateData()) 
     { 
     //do save 
     } 
    } 

    public bool ValidateData() 
    { 
     errorProvider.Clear(); 
     bool valid = true; 
     if (this.defectStatusComboBox.SelectedIndex == -1) 
     { 
      errorProvider.SetError(defectStatusComboBox, "This is a required feild."); 
      valid = false; 
     } 
     //etc... 
     return valid; 
    } 
23

Postać posiada właściwość AutoValidate, które mogą być ustawione, aby umożliwić zmianę ostrości:

+1

Jesteś panem, jesteś uczonym i dżentelmenem. Nie przyszło mi nawet do sprawdzenia właściwości poziomu formularza, ponieważ myślałem, że jest to albo dostawca błędu, albo kontrola, którą można zwalidować. – Colton

5

Właściwość formularza to "AutoValidate" i wpływa na wszystkie elementy sterujące formularza. To enum; ustaw opcję System.Windows.Forms.AutoValidate.EnableAllowFocusChange, aby umożliwić użytkownikowi zamknięcie kontroli, której testowanie się nie powiodło, ale nadal wyświetla ikonę błędu, która umożliwia użytkownikowi wyświetlenie etykiety błędu.

Właściwość kontrolna "PrzyczynaValidation" jest wartością logiczną. Jeśli jest to prawda, formant podnosi zdarzenie sprawdzania poprawności, które wyzwala błądProvider. To jest fałszywe, wszystko zostaje ominięte, użytkownik może wyjść z kontroli, ale nie ma ikony błędu ani etykiety narzędzia.