WinForm控件与自定义属性绑定

初学WinForm,记录一下学习过程,路漫漫其修远兮。

练习目标:将自定义变量与界面控件进行绑定。TrackBar:tbValue,TextBox:txtValue,Label:lbValue 三个控件,自定义属性 int MyValue;

注意:与控件进行绑定的属性,要设置为 public 权限,否则运行时会报错:无法绑定到 DataSource 的属性或列。

假定界面已经拖放了三个控件:TrackBar:tbValue,TextBox:txtValue,Label:lbValue。控件与属性绑定的代码如下:

public partial class Form1 : Form
{
    public int MyValue { get; set; }
    public Form1()
    {
        InitializeComponent();

        tbValue.DataBindings.Add("Value", this, "MyValue", true, DataSourceUpdateMode.OnPropertyChanged);
        txtValue.DataBindings.Add("Text", this, "MyValue", true, DataSourceUpdateMode.OnPropertyChanged);
        lbValue.DataBindings.Add("Text", this, "MyValue", true, DataSourceUpdateMode.OnPropertyChanged);
    }
}

这样就把三个控件以及自定义属性绑定到一起了,四者众任何一方的数据发生变化都会更行到其他三者。

注意1:测试中发现,TextBox的DataBindings.Add方法,不能添加两次,否则会运行报错,不允许两个集合绑定到同一属性。例如一下代码会报错:

public Form1()
        {
            InitializeComponent();

            txtValue.DataBindings.Add("Text", tbValue, "Value", true, DataSourceUpdateMode.OnPropertyChanged);
            txtValue.DataBindings.Add("Text", this, "MyValue", true, DataSourceUpdateMode.OnPropertyChanged);
        }

注意2:假定设置 TrackBar 的数值范围:0-100,TrackBar与TextBox进行绑定都运行,如果 TextBox中输入的数值超过100或者小于0,即不再范围内,或者TextBox的值为空时,程序不会报错,但是测试中发现,窗体的关闭按钮已经不起作用,可能时内部已经触发了异常,导致关闭按钮失效。所以,在做相应的变量绑定时候,需要注意取值范围限定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm中,我们可以通过自定义控件来添加自定义属性和事件。下面是一个示例: 1. 创建一个自定义控件类,并继承自相应的基类(例如`UserControl`)。 2. 在自定义控件类中,定义需要的自定义属性和事件。 3. 在控件的构造函数中,初始化属性和事件。 4. 在控件的绘制方法中,根据属性值来绘制控件的外观。 5. 在控件的事件处理方法中,处理相应的事件逻辑。 下面是一个示例代码: ```csharp using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; public class LEDControl : UserControl { private Color _color; private bool _isOn; // 自定义属性 [Category("LED")] [Description("LED的颜色")] public Color LEDColor { get { return _color; } set { _color = value; Invalidate(); // 重绘控件 } } // 自定义事件 public event EventHandler LEDClicked; public LEDControl() { _color = Color.Red; _isOn = false; // 初始化控件 SetStyle(ControlStyles.ResizeRedraw, true); DoubleBuffered = true; Size = new Size(50, 50); // 绑定点击事件 MouseClick += LEDControl_MouseClick; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 绘制LED的外观 using (SolidBrush brush = new SolidBrush(_isOn ? _color : Color.Gray)) { e.Graphics.FillEllipse(brush, ClientRectangle); } } private void LEDControl_MouseClick(object sender, MouseEventArgs e) { _isOn = !_isOn; Invalidate(); // 重绘控件 // 触发自定义事件 LEDClicked?.Invoke(this, EventArgs.Empty); } } ``` 使用自定义控件时,可以在设计器中直接拖拽控件到窗体上,并通过属性窗口设置自定义属性。同时,可以在代码中订阅自定义事件,并在事件处理方法中编写相应的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值