2012-09-04 51 views
0

我在VS 2012這樣的代碼:如果沒有結果在C#VS聲明2012

private void Form1_Load(object sender, EventArgs e) 
    { 
     if (Properties.Settings.Default["Database"] != null) 
     { 
      MessageBox.Show("We landed on spot 1"); 
     } 
     else 
     { 
      MessageBox.Show("We landed on spot 2"); 
     } 
    } 

我敢肯定,我搞砸了條件語法,但我希望的是,這些人會發生:

  1. 編譯器警告有關錯誤/項目無法運行。
  2. 第一消息是示出被示
  3. 第二消息。

但是沒有這些實際情況。我一直盯着這裏一個小時,我能找到的資源非常渺茫。 如果有經驗的人可以解釋我在這裏發生了什麼?

編輯: 感謝JMK's link我發現這基本上是一個wontfix錯誤的Windows 64下VS調試器彈出。如果應用程序在調試器之外運行,則會觸發錯誤。

+0

什麼_is_實際發生的? – Oded

+5

把一個調試點,看看你是否進入'Form1_Load' – Habib

+2

嘗試一個MessageBox.Show(「我們登陸點0」);在if語句之前證明Form1_Load事件正在觸發 – DaveHogan

回答

3

其無聲錯誤。

try 
    { 
     if (Properties.Settings.Default["Database"] != null) 
     { 
      MessageBox.Show("We landed on spot 1"); 
     } 
     else 
     { 
      MessageBox.Show("We landed on spot 2"); 
     } 
    } 
    catch (Exception ee) 
    { 
     MessageBox.Show(ee.Message); 
    } 

與回來「設置屬性‘數據庫’未找到」

+0

謝謝,應該首先想到手動捕捉:) – user1612992

+0

我試過了,就像wtf,所以,添加它,然後你去:) – BugFinder

0

嘗試前Properties

if (WindowsFormsApplication2.Properties.Settings.Default.Database != null) 
0

Propably異常增加你的項目的命名空間被拋出,而不是由注意到調試器。 這發生在64位Windows版本的Windows窗體項目上(並且不是特定於.NET的行爲,而是一般Windows的行爲)。

更多細節在這裏:Visual Studio does not break at exceptions in Form_Load Event

嘗試按STRG + ALT + E並註明「時拋出」爲「公共語言運行庫異常」複選框。 現在調試器將在Form_Load()中的任何異常中中斷()

因爲我知道我的解決方法是完全避免使用Load事件。

我的大部分表單都是對話框,所以我調用ShowDialog()方法並調用Init()函數。

public class Form1 
{ 

    public new DialogResult ShowDialog() 
    { 
     Init(); 
     return base.ShowDialog(); 
    } 

    public new DialogResult ShowDialog(IWin32Window owner) 
    { 
     Init(); 
     return base.ShowDialog(owner); 
    } 


    public void Init() 
    { 
     // code goes here 
    } 
}