2012-12-27 78 views
-4

那么我试图分配全局变量来读取复选框和单选按钮的值,但是当选择被改变时值不会更新!我在哪里做错了?下面的代码:全局变量返回意外值

private void chkInMut_Checked(object sender, RoutedEventArgs e) 
    { 
     GlobalVar.Mutate = 1; 
    } 

    private void chkShwCal_Checked(object sender, RoutedEventArgs e) 
    { 
     GlobalVar.ShowCal = 1; 
    } 

    private void chkOutSol_Checked(object sender, RoutedEventArgs e) 
    { 
     GlobalVar.OutCal = 1; 
    } 
} 

public static class GlobalVar 
{ 
    static int _MaxMin, _MutVal, _CalShow, _CalOut; 

    /// <summary> 
    /// Access routine for global variable. 
    /// </summary> 

    public static int Extrema 
    { 
     get 
     { 
      return _MaxMin; 
     } 
     set 
     { 
      _MaxMin = value; 
     } 
    } 

    public static int Mutate 
    { 
     get 
     { 
      return _MutVal; 
     } 
     set 
     { 
      _MutVal = value; 
     } 

    } 

    public static int ShowCal 
    { 
     get 
     { 
      return _CalShow; 
     } 
     set 
     { 
      _CalShow = value; 
     } 
    } 

    public static int OutCal 
    { 
     get 
     { 
      return _CalOut; 
     } 
     set 
     { 
      _CalOut = value; 
     } 
    } 
} 

,当我尝试使用这个测试的语句打印数字,返回的值是意外:

 maxMin = GlobalVar.Extrema; 
     calShow = GlobalVar.ShowCal; 
     calOut = GlobalVar.OutCal; 
     IsMutble = GlobalVar.Mutate; 
     txtOutput.Text += Convert.ToString("\nMaxima Minima"+maxMin+"\n"+"Show Cal : "+calShow+"\n"+"Output Cal :"+calOut+"\n"+"Mutate : "+IsMutble+"\n---------\n"); 

当我检查/取消选中的复选框,值没有更新,因为它应该是。我哪里错了?

编辑:通过添加Unchecked参数解决。

+0

只放了相关零件的代码,但不是墙的代码:) –

+3

使用自动实现的属性会让你的'GlobalVar'类体只有三行...不是我推荐首先使用全局变量... –

+0

严,您在选中的事件中始终将1设置为选中或未选中。结果总是1? – Steve

回答

0

我认为问题出在你的公共静态属性上。例如试试这个:

public static int Extrema 
{ 
    get 
    { 
     return GlobalVar._MaxMin; 
    } 
    set 
    { 
     GlobalVar._MaxMin = value; 
    } 
} 

和所有其他属性做同样的。

编辑: 为什么你使用这个结构?您可以设置静态类是这样的:

public static class GlobalVar 
{ 
    public static int Extrema; 
    public static int Mutate; 
    public static int ShowCal; 
} 
+0

这个链接可能你[静态类和静态类成员](http://msdn.microsoft.com/en-us/library/79b3xss3%28v=vs.80%29.aspx) – Ramin

+1

我会*不*建议使用公共领域。全球性能足够糟糕,但公共领域会更糟...... –

1

也许你应该写你的事件处理程序这样

private void chkInMut_Checked(object sender, RoutedEventArgs e) 
{ 
    GlobalVar.Mutate = (chkInMut.IsChecked ? 1 : 0); 
} 

等等.....

+0

显示波浪红色的线条!不工作。 –

+0

很抱歉现在注意到了WPF标签。检查更新的答案 – Steve