像在WPF中一样在winform中绑定

我想将一个winform的表单的Width属性绑定到标签上的Text,这样标签的文本就会在每次鼠标移动时更新。 目前我只在点击表单上的某个元素但没有连续更新时才实现更新(就像你在Resize处理程序中更改文本一样)。 怎么做这件事?

您可以通过执行以下操作绑定到Width属性:

label1.DataBindings.Add(new Binding("Text", this, "Width")); 

问题在于表单没有通知框架属性已经改变。 你最简单的最好的赌注可能只是做肉和土豆的方式:

 protected override void OnResize(EventArgs e) { base.OnResize(e); label1.Text = this.Width.ToString(); } 

编辑:好的,如果你真的想要使用数据绑定,这是一种有效的方式(但就像绕过你的头来划伤你的耳朵):

将对象数据源添加到表单并将DataSource设置为键入“System.Windows.Forms.Form”。

接下来,添加一些代码:

 public Form2() { InitializeComponent(); this.formBindingSource.DataSource = this; Binding binding = new Binding("Text", this.formBindingSource, "Size", true); binding.Format += new ConvertEventHandler(binding_Format); label1.DataBindings.Add(binding); } void binding_Format(object sender, ConvertEventArgs e) { Size size = (Size)e.Value; e.Value = size.Width.ToString(); } 

就像我说的那样,它完全矫枉过正,但它确实有效。

Resize事件是要处理的正确事件。 我不确定您正在寻找什么持续更新,但如果表单更改大小,则调整事件大小会触发。 我相信这还包括最小化/最大化/恢复的大小更改。 这应该涵盖表单大小的所有更改。

 private void OnFormResize(object sender, EventArgs args) { Form frm = (Form) sender; txtWidth.Text = frm.Size.Width.ToString(); } 

你是对的,绑定到Width属性将无法正常工作,因为Form没有WidthChanged事件。

您可以绑定到Size属性并使用格式化来格式化它

 public partial class Form1 : Form { public Form1() { InitializeComponent(); var binding = new Binding("Text", this, "Size", false, DataSourceUpdateMode.OnPropertyChanged); binding.Format += new ConvertEventHandler(binding_Format); label1.DataBindings.Add(binding); } void binding_Format(object sender, ConvertEventArgs e) { if (e.Value is Size) { e.Value = ((Size)e.Value).Width.ToString(); } } }