根据所选数字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的任何设置都是徒劳的,因为错误的按钮已经获得了控件。
使用公共事件处理程序处理两个控件上的更改事件,并在"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
}