我有两个numericUpDown控件。我们将其中一个命名为Left,将其他命名为Right。我有两个按钮,也将命名为左和右。
最初左键是AcceptButton。
我希望如果用户将更改Right numericUpDown,则右键将是AcceptButton。
我尝试为numericUpDown控件的ValueChanged事件设置处理程序,但最初将控制传递给Left按钮的Click事件,因为此时它是AcceptButton。
那么如何做到这样的方式,当Left按钮当前是AcceptButton并且用户更改Right numericUpDown控件并按下Enter键时,Right按钮将成为AcceptButton并且其处理程序将获得控件。
编辑:似乎没有人理解这个问题所以我会尝试再解释一下。当用户按下Enter键时,首先将程序的控制权传递给当前的AcceptButton,然后将其传递给处理程序ValueChanged。因此,ValueChanged中的AcceptButton的任何设置都是徒劳的,因为错误的按钮已经成为控件。答案 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
}