如何将控件的属性绑定到另一个控件的属性
本文关键字:属性 控件 另一个 绑定 | 更新日期: 2023-09-27 18:06:27
我的窗体上有两个控件(control1和control2),它们彼此相邻。control1的宽度是可变的。
我可以将control2的Left属性绑定到control1的width属性吗?
我写了下面的代码,但它没有工作:
control2.DataBindings.Add(new Binding("Left", control1, "Width"));
control2.DataBindings.Add(new Binding("Left", control1, "Width"));//Your code
你的代码不工作,因为当改变Width
属性时没有更改通知,但Size
有。
你可以绑定到Size
,但问题是你需要一个int
,但大小属性的类型是Size
,所以你需要转换它也使用Format事件,像这样。
var binding = new Binding("Left", control1, "Size", true,DataSourceUpdateMode.Never);
binding.Format += (sender, args) =>
{
if (args.DesiredType == typeof (int))
{
Size size = (Size) args.Value;
args.Value = size.Width;
}
};
control2.DataBindings.Add(binding);
另一种方法是在源代码控制中实现INotifyPropertyChanged
。应该可以了
try this:
control2.DataBindings.Add(new Binding("Left", control1, "Width"));
你可以这么做。这里是一个代码片段,我将trackbar值绑定到按钮的宽度
button1.DataBindings.Add(new Binding("width", trackBar1, "value"));
我也尝试了文本框,它也工作。
button1.DataBindings.Add(new Binding("left", textBox1, "Text"));
需要实现INotifyPropertyChanged接口
我再往下看,它有三个选项
public enum DataSourceUpdateMode
{
OnValidation,
OnPropertyChanged,
Never
}
默认是OnValidation,但是Width不会引起Validation和PropertyChanged
用法示例:
panel1.DataBindings.Add(new Binding("Width", panel2, "Width", false, DataSourceUpdateMode.OnPropertyChanged));
我认为处理这个问题最简单的方法是通过EventHandlers:
public Form1()
{
InitializeComponent();
panel2.SizeChanged +=panel2_SizeChanged;
}
private void button1_Click(object sender, EventArgs e)
{
panel2.Size = new Size(panel2.Size.Width * 2, panel2.Size.Height * 2);
}
void panel2_SizeChanged(object sender, EventArgs e)
{
panel1.Size = panel2.Size;
}