如何将textBox中的字体大小绑定到数据源?

时间:2013-12-06 19:59:53

标签: c# winforms

我已经实例化了一个类'my_font_size',它有一个访问者'Size_Points',我试图绑定几个控件。

这就是我正在尝试的:

textBox1.DataBindings.Add("Font.Size", my_font_size, "Size_Points", false, DataSourceUpdateMode.OnPropertyChanged);

但是我得到了一个Argument.Exception,

Cannot bind to the property 'Font.Size' on the target control.

如何深入了解该物业?

2 个答案:

答案 0 :(得分:2)

Binding中的{p> winforms不支持嵌套路径,您必须绑定Font属性并使用一些Format事件处理程序来控制绑定,如下所示:

Binding bind = new Binding("Font", my_font_size, "Size_Points");
bind.Format += (s,e) => {
   var b = s as Binding;
   var currentFont = b.Control.Font;
   e.Value = new Font(currentFont.FontFamily, 
                      (float) e.Value, currentFont.Style);
};
textBox1.DataBindings.Add(bind);

但是我怀疑你的班级my_font_size没有足够的条件让Binding工作。以下是如何通过遵循模式来通知某些属性的更改:

public class my_font_size {
   float size_Points;
   public float Size_Points {
     get { return size_Points;}
     set {
        if(size_Points != value){
          size_Points = value;
          OnSize_PointsChanged(EventArgs.Empty);
        }
     }
   }
   public event EventHandler Size_PointsChanged;
   protected virtual void OnSize_PointsChanged(EventArgs e){
     var handler = Size_PointsChanged;
     if(handler != null){
        handler(this, e);
     }
   }
}

你也可以使用INotifyPropertyChanged,但我让那部分让你搜索更多。

答案 1 :(得分:1)

您需要将my_font_size改为Font并绑定到Font的{​​{1}}。 TextBox类是不可变的,必须全局绑定。