根据所选的numericUpDown控件更改AcceptButton

时间:2014-09-11 18:56:57

标签: c# winforms

我有两个numericUpDown控件。我们将其中一个命名为Left,将其他命名为Right。我有两个按钮,也将命名为左和右。

最初左键是AcceptButton。

我希望如果用户将更改Right numericUpDown,则右键将是AcceptButton。

我尝试为numericUpDown控件的ValueChanged事件设置处理程序,但最初将控制传递给Left按钮的Click事件,因为此时它是AcceptButton。

那么如何做到这样的方式,当Left按钮当前是AcceptButton并且用户更改Right numericUpDown控件并按下Enter键时,Right按钮将成为AcceptButton并且其处理程序将获得控件。

编辑:似乎没有人理解这个问题所以我会尝试再解释一下。当用户按下Enter键时,首先将程序的控制权传递给当前的AcceptButton,然后将其传递给处理程序ValueChanged。因此,ValueChanged中的AcceptButton的任何设置都是徒劳的,因为错误的按钮已经成为控件。

2 个答案:

答案 0 :(得分:0)

在两个控件上使用公共事件处理程序来更改事件,并在“sender”参数的帮助下确定实际的发件人。根据控件名称,您可以激活按钮。

答案 1 :(得分:0)

    public Form1()
    {
        InitializeComponent();

        right_upDown.ValueChanged += new EventHandler(OnNumericUpDownValueChanged);
        left_upDown.ValueChanged += new EventHandler(OnNumericUpDownValueChanged);
        button_left.Click += new EventHandler(OnAcceptButtonClicked);
    }

    void OnAcceptButtonClicked(object sender, EventArgs e)
    {

    }

    void OnNumericUpDownValueChanged(object sender, EventArgs e)
    {
        if (sender == right_upDown)
        {
            this.AcceptButton = button_right;
            button_left.Click -= OnAcceptButtonClicked;  //Un-register the event from the left
            button_right.Click += new EventHandler(OnAcceptButtonClicked); //Register the event on the right
        }
        else
        {
            this.AcceptButton = button_left;
            button_right.Click -= OnAcceptButtonClicked; //Un-register the event from the right
            button_left.Click += new EventHandler(OnAcceptButtonClicked); //Register the event on the left
        }
    }

如果您更喜欢使用AcceptButton属性,也可以这样做:

    public Form1()
    {
        InitializeComponent();

        right_upDown.ValueChanged += new EventHandler(OnNumericUpDownValueChanged);
        left_upDown.ValueChanged += new EventHandler(OnNumericUpDownValueChanged);
        button_left.Click += new EventHandler(OnAcceptButtonClicked);
    }

    void OnAcceptButtonClicked(object sender, EventArgs e)
    {

    }

    void OnNumericUpDownValueChanged(object sender, EventArgs e)
    {
        this.AcceptButton -= OnAcceptButtonClicked;  //Un-register the event from the AcceptButton
        if (sender == right_upDown)
        {
            this.AcceptButton = button_right;
        }
        else
        {
            this.AcceptButton = button_left;
        }

        this.AcceptButton += new EventHandler(OnAcceptButtonClicked); //Register the event on new AcceptButton
    }