我有简单的 Windows 窗体应用程序(不是 WPF),我有两个控件:
- 轨迹栏
- 数字上下
我想在它们之间进行一些绑定,所以如果其中一个的值发生变化,另一个控件将被更新以显示相同的值。
这可能吗?如果是这样,我该怎么做?
谢谢。
我有简单的 Windows 窗体应用程序(不是 WPF),我有两个控件:
我想在它们之间进行一些绑定,所以如果其中一个的值发生变化,另一个控件将被更新以显示相同的值。
这可能吗?如果是这样,我该怎么做?
谢谢。
当然,这是可能的。我不知道有什么方法可以使两个控件之间的连接自动进行,因此您将自己编写代码。但别担心,这并不难。
您首先需要将处理程序附加到每个控件在其值更改时引发的事件。从逻辑上讲,两者控制这个事件是一样的:ValueChanged
. 然后,在每个事件处理程序方法中,您可以以编程方式将另一个控件的值设置为第一个控件的新值。例如:
void myNumericUpDown_ValueChanged(object sender, EventArgs e)
{
// Sync up the trackbar with the value just entered in the spinbox
myTrackBar.Value = Convert.ToInt32(myNumericUpDown.Value);
}
void myTrackBar_ValueChanged(object sender, EventArgs e)
{
// Sync up the spinbox with the value just set on the trackbar
myNumericUpDown.Value = myTrackBar.Value;
}
显然,要使其正常工作,您要么需要确保控件具有相同的范围(最大值和最小值),要么在上面的代码中添加一些错误检查。
每当其中一个控件导致值更改时,其更改值处理程序将导致另一个控件发生更改,然后其更改处理程序运行。但这一次值将相同,因此更改处理程序不会再次触发,从而结束潜在的无限循环。
有一些方法可以只触发一个处理程序,但它们可能不值得。
我要指出,对于一个轨迹栏控件,使用滚动事件将导致滚动处理程序仅在用户实际移动轨迹栏控件时触发。如果它由于代码(其他控件更改处理程序)而移动,则不会触发滚动事件。因此,使用它而不是值更改事件将有助于朝着这个方向发展。
在另一个方向上有点困难。您必须创建一个数字 up down 派生类并覆盖 UpButton 和 DownButton 方法以捕获对控件本身的向上和向下箭头的单击。