2011-12-01 45 views
1

我是c#的新手,对WPF应用程序中的事件有疑问。我有两个事件(Button_Click和myslider_ValueChanged),并希望在Button_Click之后运行myslider_ValueChanged。我曾尝试使用EventHandler,但它同时仍然运行两个事件。有没有更简单的方法来做到这一点,如嵌套事件?任何帮助表示赞赏,谢谢。我在下面附加了我的EventHandler尝试。如何按特定顺序运行多个事件?

namespace program 
    { 
     public partial class MainWindow : Window 
     { 

      public event EventHandler _Click; 
      public event EventHandler _ValueChanged; 

      protected void On_Click(EventArgs e) 
      { 
       if (_Click != null) 
       { 
        _Click(this, e); 
       } 
      } 

      protected void On_ValueChanged(EventArgs e) 
      { 
       On_Click(EventArgs.Empty); 

      } 

      private void Initialize() 
      { 
       _Click += new EventHandler(_Click); 
       _ValueChanged += new EventHandler(_ValueChanged); 
       _Click += _ValueChanged; 
      } 


      private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
      { 
       //Code here 
      } 

      private void myslider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
      { 
      //Code here 
      } 
+0

这完全像它应该。您想做什么?如果用户点击按钮,则应该执行按钮处理程序。与滑块相同。 – dasheddot

+0

运行程序时,myslider和按钮都会激活。我只希望在点击按钮后滑块处于活动状态。 –

回答

4

你应该有myslider_ValueChanged调用不同的方法来完成工作,然后调用新的方法从button_click。

例如:

 private void myslider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
     { 
      HandleValueSliderChanged(); 
     } 
     private void HandleValueSliderChanged() { 
      //Code here 
     } 

     private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
     { 
      //Code here 
      HandleValueSliderChanged(); 
     } 
+0

感谢您的帮助,这似乎仍然与按钮同时运行,而不是之后。主要问题是我有一个Convert.ToDouble(s);它检查输入是否是有效的数字,如果不是,则输入错误。当程序启动滑块= 3并且所有的用户输入都是0时,这在我的情况下是无效的。 –

+0

对不起,您的原始问题中并不清楚(通过运行,您的意思是启用)。在这种情况下,您可以删除滑块事件处理程序(除非您需要它),在设计器中将滑块Enabled属性设置为false,并在Button事件处理程序中将滑块Enabled属性设置为true。 –

+0

很好,谢谢。 –

0

所以刚才设置的按钮单击事件中myslider.IsEnabled =真。并在之前的Initialize方法中将其设置为false。