WPF中的Window.ShowDialog()打开的窗口中的按钮Close()事件

我经常会使用ShowDialog().Value;这个遇到实现下面的功能时,ShowDialog()出的窗体Close()时,并不能返回值。
错误代码如下:
  • 1.
  • 2.
0 AddDataWay addDataWay = new AddDataWay();
 1 if (addDataWay.ShowDialog().Value)  // 
 2             {
 3                 int selectedWay = addDataWay.SelectWay();
 4                 if (selectedWay == 1)
 5                 {
 6                 }
 7                 else
 8                 {
 9                 }
10             }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
对策一,更改为:
  • 1.
0 AddDataWay addDataWay = new AddDataWay();
 1 if (addDataWay.ShowDialog().HasValue)  // 
 2             {
 3                 int selectedWay = addDataWay.SelectWay();
 4                 if (selectedWay == 1)
 5                 {
 6                 }
 7                 else
 8                 {
 9                 }
10             }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
对策二,AddDataWay代码中 this.Close();前加入一行 this.DialogResult = true;如下:
  • 1.
1 base.DialogResult = true; //this.Close()
  • 1.
2 base.Close();  //this.DialogResult = true;
  • 1.
补充:C#base和this的区别;
  • 1.
AddDataWay窗口代码:
  • 1.
1 public partial class AddDataWay : DXWindow
 2     {
 3         #region 成员变量
 4         public static int selectedWay=1;  // 选择方式默认云端
 5         #endregion
 6 
 7         public AddDataWay()
 8         {
 9             this.InitializeComponent();
10         }
11 
12         private void DXWindow_Loaded(object sender, RoutedEventArgs e)
13         {
14         }
15 
16         /// <summary>
17         /// 云端-0
18         /// </summary>
19         /// <param name="sender"></param>
20         /// <param name="e"></param>
21         private void ImportFromTheCloud_Click(object sender, RoutedEventArgs e)
22         {
23             selectedWay = 0;
24             this.Close();
25         }
26 
27         /// <summary>
28         /// 本地-1
29         /// </summary>
30         /// <param name="sender"></param>
31         /// <param name="e"></param>
32         private void ImportFromTheLocal_Click(object sender, RoutedEventArgs e)
33         {
34             selectedWay = 1;
35             this.Close();
36         }
37     }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

 

作者:꧁执笔小白꧂