MfgRecipeTypeKey = If(placeholderMRTK Is Nothing, 0, placeholderMRTK)
i to wszystko w porządku, ale kiedy placeholderMRTK faktycznie jest Nic się nie powiedzie, nie podnosząc wyjątek, tylko rzucić sub (MyBase.Load dla postaci dialogowym) i kontynuuje na z aplikacją. Kiedy przepisuję to jako:
If placeholderMRTK Is Nothing Then
MfgRecipeTypeKey = 0
Else
MfgRecipeTypeKey = placeholderMRTK
End If
działa poprawnie. Myślałem, że te dwie są logicznymi odpowiednikami.
Więc:
1) Jaka jest rzeczywista różnica między tymi dwoma, że ja nie wiem?
2) Dlaczego pierwsza może zawieść? Zastanawiam się, czy nie jest to kwestia sporadycznego problemu z typowaniem, ale oba placeholderMRTK i MfgRecipeTypeKey są zadeklarowane jako Byte? (bajt zerowy).
3) Dlaczego wykonanie po prostu wypada z subu bez przedstawienia mi wyjątku. Kiedy ta linia jest podświetlona w Visual Studio (Pro 2013, jeśli ma znaczenie) i I f11 dla następnej linii, to po prostu przeskakuje i uruchamia zdarzenie renderowania datagrid, a następnie prezentuje moje okno dialogowe, ale bez ważnych przydziałów danych, które miały miejsce pod maską . A biorąc pod uwagę, że to robi (czy jest to nowe zachowanie w 2013 r.?), Jak mam debugować?
Dziękujemy za poświęcony czas i uwagę!
Jeżeli obie zmienne są pustych zamiast nic nie można użyć metody hasValue, na przykład: MfgRecipeTypeKey.Value = Jeśli (placeholderMRTK.HasValue, placeholderMRTK.Value, 0) – sblandin
Co do trzeciego pytania: [VS2010 robi nie wyświetla nieobsługiwanego komunikatu wyjątku w aplikacji WinForms w 64-bitowej wersji systemu Windows] (https: // stackoverflow.com/questions/4933958/vs2010-nie-show-nieobsługiwany-wyjątek-wiadomość-w-a-winform-aplikacja-na-a/11997142 # 11997142) – sloth
Aby dowiedzieć się, dlaczego pierwsze oświadczenie nie działa, sugeruję wykonanie to (tak jak test) po zakończeniu ładowania programu obsługi zdarzeń. W ten sposób powinieneś być w stanie zobaczyć wyjątek. – Blackwood