我的表单上有两个控件(control1和control2),它们位于彼此旁边。 control1的宽度是可变的。
我可以将control2的Left属性绑定到control1的width属性吗?
我写了下面的代码,但它不起作用:
control2.DataBindings.Add(new Binding("Left", control1, "Width"));
答案 0 :(得分:1)
试试这个:
control2.DataBindings.Add(new Binding("Left", control1, "Width"));
答案 1 :(得分:0)
需要实现INotifyPropertyChanged接口。
我看得更深,它有三个选项
public enum DataSourceUpdateMode
{
OnValidation,
OnPropertyChanged,
Never
}
默认为OnValidation,但宽度不会导致Validation既不会导致PropertyChanged
使用示例:
panel1.DataBindings.Add(new Binding("Width", panel2, "Width", false, DataSourceUpdateMode.OnPropertyChanged));
答案 2 :(得分:0)
你可以做到这一点。这是我的绑定轨道栏值到按钮宽度
的片段button1.DataBindings.Add(new Binding("width", trackBar1, "value"));
我也尝试使用Textbox,它也在工作。
button1.DataBindings.Add(new Binding("left", textBox1, "Text"));
答案 3 :(得分:0)
control2.DataBindings.Add(new Binding("Left", control1, "Width"));//Your code
您的代码不起作用,因为在查看Width
属性时没有更改通知,但Size
确实如此。
您可以绑定到Size
,但问题是您需要int
但Size属性的类型为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
。这应该可以解决问题。
答案 4 :(得分:0)
我认为最简单的处理方法是通过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;
}