2016-04-19 15 views
-1

私はいくつかのイベントとしてMainWindowクラスを持っています - それらはすべて別のクラスのメソッドを呼び出す必要があります。起動時にSizeChangedイベントを避ける

public partial class MainWindow : Window 
    { 

     public MainWindow() 
    {   
     InitializeComponent(); 

     getdata.MainWindow = this; 
    } 


    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     getdata go = new getdata(); 
     go.clear(); 
    } 

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     getdata go = new getdata(); 
     go.clear(); 
    } 

private void comboBox2_DropDownClosed(object sender, EventArgs e) 
    { 

     getdata go = new getdata(); 
     go.clear(); 

    } 

    private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)   { 
     getdata go = new getdata(); 
     go.clear(); //<-this causes exception on Startup 
    } 

} 

問題MainWindow_SizeChangedイベントは、プログラムの起動時にトリガーされるが、明確な方法でもまだエラーが発生し起動、で作成されていないいくつかのオブジェクトを使用していることです。これを避けて、プログラムの実行中にサイズが実際に変更された場合にのみ、このイベントを発生させることができますか?

+0

どのオブジェクトがまだ初期化されていないのですか? –

+1

フラグが設定されていない限り、オブジェクトが作成され、SizeChangedハンドラではブーリアンフラグを設定します。 –

答えて

1

WindowのIsLoadedプロパティがあります。

コードを実行する前に確認できます。

+0

サイズ変更されたイベントが呼び出されるまでに、ウィンドウはロードされませんでしたか? –

+0

ウィンドウがロードされ、SizeChangedイベントが発生すると、IsLoadedはfalseになり、これが機能します – Marc

0

サイズ変更時にアイテムがヌルであるかどうかを確認できるので、これが問題ではない場合はnull coalescencenull conditionalの演算子を使用して行うことができます。たとえば、あなたが起動時に、テキストボックス(TextBox)コントロールの値を使用しているが、それはインスタンス化されていない場合は、ウィンドウがロードされる前に、この

string someText = tB1?.Text? 
if(someText == null) return; 
0

SizeChangedイベントがトリガされます使用することができます。 Loadedイベントの一部としてSizeChangedイベントを購読し、下記のようにUnloadedに登録を解除してください。

//XAML 
<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     Loaded="Window_Loaded" 
     Unloaded="MainWindow_OnUnloaded"> 

//Code Behind 
private void Window_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    Debug.WriteLine("Size Changed Triggered"); 
} 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    SizeChanged += Window_SizeChanged; 
} 

private void MainWindow_OnUnloaded(object sender, RoutedEventArgs e) 
{ 
    SizeChanged -= Window_SizeChanged; 
} 
関連する問題