Wpadłem na bardzo specyficzny błąd z formantem DateTimePicker w Windows Forms. Formant ma niestandardowy format (MM-RRRR -> 01/2010) - miesiąc/rok karty kredytowej. Dzisiaj jest 29 września. Jeśli użytkownik wybierze formant i użyje klawiatury do ustawienia miesiąca na luty, formant wygeneruje wyjątek ArgumentOutOfRangeException. Nie ma takiej daty jak 29-luty-2009. To samo stanie się w dniach jako 31., przechodząc do miesiąca z zaledwie 30 dniami.Jak obsługiwać formularz datetimepicker okna ArgumentOutOfRangeException?
Z łatwością można sobie z tym poradzić, ustawiając dzień na "01", jednak użytkownik może kliknąć kalendarz, aby ręcznie wybrać 30., a następnie za pomocą klawiatury wybrać luty.
W jaki sposób można uchwycić ten wyjątek, gdy dane wejściowe występują w interfejsie GUI, a nie w kodzie? Próbowaliśmy złapać to w zdarzeniu TextChanged, ale jest już za późno. Wyjątek został już zgłoszony.
Czy istnieje sposób postępowania z tą sprawą? Byłoby miło, gdyby sterowanie automatycznie zmieniło dzień na najwyższą wartość dla tego miesiąca. Lub przynajmniej, jeśli przeszedł wyjątek przez zdarzenie.
(Jestem świadomy, że możemy uwięzić zdarzenie KeyPressed i ustawić dzień na 01 za każdym razem, ale to wydaje się "hacky").
Właśnie sprawdziłem, czy zdarza się, gdy dzień jest pokazywany użytkownikowi, a tak nie jest. Więc masz rację, niewłaściwa kontrola jest w użyciu. Ale moim celem było zadać pytanie, czy można poradzić sobie z wyjątkami, które miały miejsce w podobny sposób? Jeśli wyjątek jest generowany z interakcji interfejsu użytkownika kontrolki. –