0

かなり単純な C#/WPF の質問があります。C#/WPF の私のスキルはそれほど良くないので、答えが既に出ている場合は申し訳ありませんが、それを見るほど賢くありませんでした。

App.xaml.cs からインスタンス化したメイン ウィンドウがあります。

internal static MainWindow mw;
protected override void OnStartup(StartupEventArgs e)
        {
            try
            {
                //investwindow = new Invest();
                mw = new MainWindow();
                mw.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

私の mainwindow クラスには、他のウィンドウ/クラスをインスタンス化するボタンの束が含まれています。次に例を示します。

private void btnInvest_Click(object sender, RoutedEventArgs e)
        {
            investwindow = new Invest();
            investwindow.Show();
        }

この XAML の投資ウィンドウには、「InvestSP」というグリッドがあります。Investmentwindow のコードを実行すると、"StockItem" というクラスを実行します。このクラスは、大量の入力を受け取り、それらをグループ ボックスといくつかのテキスト ボックスに書き込み、それらをスタック パネルに配置します。StockItem クラスのコード全体をコピーすることはしませんが、最後の部分は、グループボックスをスタックパネルに追加しようとしたときにエラーを生成する部分です。

try
            {
                App.mw.investwindow.InvestSP.Children.Add(GroupB);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }

エラー メッセージは System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私は多くのことを試しましたが、役に立たないものもあれば、悪化させるものもあります。私の理解不足が原因であることは承知していますが、しばらくお待ちください。ただ最善を尽くしているだけです。私を正しい方向に向けてくれてありがとう。さらに情報やコードが必要な場合は、お知らせください。

感謝を込めて!

ウーター

4

1 に答える 1

0

App.mw.investwindowオブジェクトを設定していないようです。確認するためにデバッグすることでnullオブジェクトを見つけることができます。私が提案するのは次のとおりです。

App.xaml.csウィンドウで必要になる任意のデータオブジェクトへの参照を保持する静的コレクションをに作成できます。

public static ObservableCollection<GroupB> GroupBs {get; set;} // in App.xaml.cs

InvestSPグリッドのItemsSourceをこのコレクションに設定します。

InvestSP別のウィンドウからグリッドに何かを追加したい場合は、オブジェクトをこのコレクションに追加するだけです。

App.GroupBs.Add(GroupB);

グリッドが更新されていることがわかります。

于 2013-01-02T12:46:48.540 に答える