2013-07-16 4 views
1

Я получаю исключение для ссылки на строку, которую я указал с комментарием. Кто-нибудь есть идея, почему это происходит?Исключение Null ссылки после определенного количества секунд

var form = Form.ActiveForm as Form1; 
var doSave = MessageBox.Show("Would you like to save this measurement?", 
          "Save Measurement", 
          MessageBoxButtons.YesNo, 
          MessageBoxIcon.Question); 

if (doSave == DialogResult.Yes) // User wants to save the current measurement. 
{ 
    curName = ShowDialog("Measurement Name", "Save Measurement"); 
    // ERROR HERE **** 
    int ret = form.databaseClass.GetFirstSoundReadyTestOccurrence(form.testNumber.Text); 
+3

Опубликовать данные об исключении, включая трассировку стека - в противном случае люди могут только догадываться о вашей проблеме. –

+0

Я за секунду. –

+1

Я предполагаю, что 'form' равно null, поэтому' Form.ActiveForm' является нулевым или не является экземпляром 'Form1'. В противном случае 'form.databaseClass' или' form.testNumber' равно null. – Lee

ответ

4

Я бы поспорил, что это случай формы. Активная форма, не имеющая типа Form1.

Это должно быть легко воспроизвести. Просто убедитесь, что ваша активная форма не имеет тип Form1, прежде чем попасть в этот код. Другими словами ... убедитесь, что какая-либо другая форма активна, когда этот код запускается.

Изменения, указанные ниже, будут исправлены, когда это произойдет, но вы действительно хотите получить более надежный способ получить форму. Не зная больше о своем дизайне, сложно рекомендовать лучший способ получить форму.

var form = Form.ActiveForm as Form1; 
if (form != null) 
{ 
var doSave = MessageBox.Show("Would you like to save this measurement?", 
          "Save Measurement", 
          MessageBoxButtons.YesNo, 
          MessageBoxIcon.Question); 

if (doSave == DialogResult.Yes) // User wants to save the current measurement. 
{ 
    curName = ShowDialog("Measurement Name", "Save Measurement"); 
    // ERROR HERE **** 
    int ret = form.databaseClass.GetFirstSoundReadyTestOccurrence(form.testNumber.Text); 
} 
}