You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wonderware InTouch中ActiveX控件属性与标签无法双向绑定问题咨询

C# ActiveX控件与Wonderware InTouch标签双向绑定解决方案

你遇到的问题核心不是无法实现双向绑定,而是缺少属性变更通知机制——InTouch要主动读取控件属性值,需要控件在属性变化时主动通知COM容器(也就是InTouch),仅添加[Bindable(true)]这类特性不足以满足要求。

以下是具体的修正方案:

1. 实现COM兼容的属性变更通知

在C#开发ActiveX控件时,需通过INotifyPropertyChanged接口暴露属性变更事件(.NET的COM互操作会自动将这个接口转换为COM兼容的事件机制,供InTouch识别)。

2. 修改属性代码并添加事件触发

调整属性实现逻辑,确保:

  • 用私有字段存储属性值,避免直接依赖控件内部元素的状态
  • 在属性setter中检测值变化并触发变更事件
  • 同步控件内部元素(如textBox1)的用户输入到属性,并触发通知

示例代码:

using System.ComponentModel;
using System.Windows.Forms;

public partial class YourActiveXControl : UserControl, INotifyPropertyChanged
{
    // 实现属性变更事件
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _text1;

    // 配置属性特性,确保COM可见且可绑定
    [Bindable(true)]
    [Browsable(true)]
    [Category("Data Binding")]
    [Description("支持双向绑定的文本属性")]
    public string Text1
    {
        get => _text1;
        set
        {
            if (_text1 != value)
            {
                _text1 = value;
                textBox1.Text = value;
                // 通知容器属性已变更
                RaisePropertyChanged(nameof(Text1));
            }
        }
    }

    // 监听内部文本框的输入变化,同步到属性并触发通知
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (_text1 != textBox1.Text)
        {
            _text1 = textBox1.Text;
            RaisePropertyChanged(nameof(Text1));
        }
    }

    // 控件构造函数中绑定文本框事件
    public YourActiveXControl()
    {
        InitializeComponent();
        textBox1.TextChanged += textBox1_TextChanged;
    }
}

3. 控件注册与InTouch配置注意事项

  • 重新编译控件后,使用regasm /codebase /tlb YourControl.dll重新注册,确保类型库(.tlb)正确生成并包含事件信息
  • 在InTouch中关联标签时,确认标签的数据类型与控件属性类型匹配(比如都是字符串)
  • 部分InTouch版本需要在标签绑定设置中明确启用“读取属性”选项(可参考InTouch的ActiveX绑定配置界面)

完成上述步骤后,即可实现ActiveX控件属性与InTouch标签的双向绑定:标签可以设置控件属性,控件属性变化时也能同步更新到标签。

内容的提问来源于stack exchange,提问作者sdb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:55:23