2017-01-17 10 views
0

私はメインのWPFウィンドウでこのコードを持っている:null参照の例外command.Parameters.AddWithValueを使用して()

private void ButtonChangePermissions_Click(object sender, RoutedEventArgs e) 
{ 
    if (ComboBoxSelectedProfile.SelectedIndex != -1) 
    { 
     ChangePermissionsWindow cpWindow = new ChangePermissionsWindow { parent = this }; 
     cpWindow.Show(); 
    } 
    else 
    { 
     MessageBox.Show("Please choose a profile first."); 
    } 
} 

これは、ウィンドウのコードWPF子です:何らかの理由

public partial class ChangePermissionsWindow : Window 
{ 
     private readonly string dbConnectionString = Properties.Settings.Default.dbConnectionString; 
     public postLoginWindow parent { get; set; } 

     public ChangePermissionsWindow() 
     { 
      InitializeComponent(); 
      ComboBoxValuesToShow(); 
     } 

     private void ComboBoxValuesToShow() 
     { 
      using (SqlConnection connection = new SqlConnection(dbConnectionString)) 
      { 
       try 
       { 
        connection.Open(); 

        if (TableFunctions.doesTableExist("ProfilePermissions", dbConnectionString)) 
        { 
         string selectQuery = "SELECT Permissions from ProfilePermissions where ProfileName = @ProfileName"; 

         using (SqlCommand command = new SqlCommand(selectQuery, connection)) 
         { 
          command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text);//This line produces the Null reference error 
          ...Does not matter from here 
         } 

行:

command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text) 

は、NullReferenceExceptionです。

これは、例外のドキュメントであり:

System.NullReferenceException:オブジェクト参照オブジェクトのインスタンス に設定されていません。 WpfApplication1.Windows.ChangePermissionsWindow.ComboBoxValuesToShow()Cで で
:\ユーザーは\検閲\ドキュメントは、Visual Studioを\プロジェクト\ 2013 \ WpfApplication1 \ WpfApplication1のWindows \ WindowChangePermissions.xaml.cs \:ライン38}
のSystem.Exception {System.NullReferenceException

私はあなたの助けを非常に感謝します!オブジェクト初期化構文を使用して非常に高いレベルで

答えて

1

は次の手順を実行します...

  1. は、上場不動産セッターのすべての適切なコンストラクタ
  2. コールを呼び出すことにより、目的のクラスのインスタンスを作成します
  3. 戻り、新たに初期化されたオブジェクト

がコンストラクタから呼び出されComboBoxValuesToShow が、Bプロパティのセッターはインスタンスが作成されるまで呼び出されないので、コンストラクターが返されるまでは、リストされたステップの通りにメソッドが使用されます(メソッドで使用されるプロパティーはです)。したがって、この場合、親プロパティは常にnullになります。これを解決するために頭に浮かぶいくつかの方法があります

...

  • あなたがコンストラクタに値を渡し、コンストラクタでプロパティを使用してプロパティを初期化したい場合内部的に。

それとも

  • 親ウィンドウからアクセスComboBoxValuesToShowメソッドを作成し、親ウィンドウのイベントハンドラにコンストラクタからComboBoxValuesToShowへの呼び出しを移動します。
+0

あなたの説明はGOLDです、あなたは私がどれほど明確にそれを作ったのか驚いています。 あなたに購読する方法はありますか? – WeinForce