我有一个MainWindow类,作为一些事件 - 所有这些都应该在另一个类中调用一个方法。
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事件也是在程序启动时触发的,但clear方法也使用了一些尚未在Startup中创建的对象,这会导致错误。我怎样才能避免这种情况,只有在运行程序时实际更改了大小才会触发此事件?
答案 0 :(得分:1)
您具有Window的IsLoaded属性。
您可以在执行代码之前检查它。
答案 1 :(得分:0)
您可以在重新调整大小时检查项是否为空,这样可以避免出现问题,可以使用null coalescence和null conditional运算符完成此操作。例如,如果您在启动时使用textBox的值但尚未实例化,则可以使用此
string someText = tB1?.Text?
if(someText == null) return;
答案 2 :(得分:0)
SizeChanged
在加载窗口之前触发事件。您可以尝试在SizeChanged
事件中订阅Loaded
事件,并在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;
}