代码之家  ›  专栏  ›  技术社区  ›  AngryHacker

如何知道绑定何时设置文本框与用户?

  •  1
  • AngryHacker  · 技术社区  · 14 年前

    private BindingSource bndSource = new BindingSource();
    
    private void Form1_Load(object sender, EventArgs e) {
        bndProposal.DataSource = new DomainObject() { ClientCode = "123", EdiCode = "456" }; 
        txtAgencyClientCode.DataBindings.Add("Text", bndProposal, "ClientCode", 
                                    false, DataSourceUpdateMode.OnPropertyChanged, null);
    
    }
    
    private void txtAgencyClientCode_TextChanged(object sender, EventArgs e)
    {
        Debug.WriteLine("txtAgencyClientCode_TextChanged");
    }
    
    public class DomainObject
    {
        public string ClientCode { get; set; }
        public string EdiCode { get; set; }
    }
    

    代码运行良好。但是,我想知道TextChanged事件激发的原因:是因为它是由BindingSource设置的,还是因为用户输入了什么(或粘贴了什么)。我怎么得到这些信息?

    我试过在创建绑定时设置一个标志,但在绑定时,文本框位于不可见的选项卡控件上。当我切换到文本框有问题的选项卡时,事件实际上会触发。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jla    14 年前

    您可以在设置文本后订阅事件。在设计器中禁用它并将其添加到窗体加载中:

    private void Form1_Load(object sender, EventArgs e) {
        txtAgencyClientCode.DataBindings.Add("Text", bndProposal, "ClientCode", 
                                    false, DataSourceUpdateMode.OnPropertyChanged, null);
        txtAgencyClientCode.TextChanged += new System.EventHandler(txtAgencyClientCode_TextChanged);
    
    }
    

    txtAgencyClientCode.TextChanged  -= txtAgencyClientCode_TextChanged;
    
        2
  •  1
  •   AJ.    14 年前

    有什么理由让你不得不使用 TextChanged 用户输入的事件?你能不能换个活动,比如 KeyPress