如何将控件的属性绑定到另一个控件的属性

时间:2014-06-03 08:06:21

标签: c# .net winforms visual-studio

我的表单上有两个控件(control1和control2),它们位于彼此旁边。 control1的宽度是可变的。

我可以将control2的Left属性绑定到control1的width属性吗?

我写了下面的代码,但它不起作用:

control2.DataBindings.Add(new Binding("Left", control1, "Width"));

5 个答案:

答案 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;
    }