根据所选数字UpDown控件更改AcceptButton

本文关键字:控件 AcceptButton UpDown 数字 | 更新日期: 2023-09-27 18:21:30

我有两个numericUpDown控件。让我们把其中一个命名为"左",另一个名称为"右"。我有两个按钮也将被命名为左和右。

最初的"左"按钮是AcceptButton。

我希望如果用户将Right数字UpDown更改,那么Right按钮将是AcceptButton。

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

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

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

根据所选数字UpDown控件更改AcceptButton

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

    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
    }