1

我有 2 个使用相同 BindingSource 的文本框。当我更新一个 TextBox 并失去焦点时,另一个 TextBox 不会将其属性更新为新值。

任何帮助将不胜感激。

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

    namespace TextBoxes
    {
        public partial class Form1 : Form
        {
            BindingSource bs1 = new BindingSource();
            public Form1()
            {
                InitializeComponent();
                this.Load += Form1_Load;
            }
            void Form1_Load(object sender, System.EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Name");
                dt.Rows.Add("Donald Trump");
                dt.Rows.Add("Sergei Rachmaninoff");
                dt.Rows.Add("Bill Gates");

                bs1.DataSource = dt;
                bs1.RaiseListChangedEvents = true;
                bs1.CurrencyManager.Position = 1;

                textBox1.DataBindings.Add("Text", bs1, "Name");
                textBox2.DataBindings.Add("Text", bs1, "Name");
            }
        }
    }
4

2 回答 2

0

您可以使用 endEdit 强制刷新 - 如果您将其放在 textchanged 上,那么当您更改 textbox1 时,textbox2 将自动更改。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    bs1.EndEdit();
}

(如果你想要相互更新,对 textbox2 的 textchanged 执行相同的操作)。

虽然我会说如果你绑定到一个列表,组合不是更好吗?

于 2013-02-22T14:14:52.263 回答
0

在您的代码中添加以下方法...它将起作用...

表单设计器.cs

        this.textBox1.LostFocus += new System.EventHandler(this.textBox1_LostFocus);
        this.textBox2.LostFocus += new System.EventHandler(this.textBox2_LostFocus);

表格.cs

        private void textBox1_LostFocus(object sender, EventArgs e)
        {
            textBox2.DataBindings.Clear();
            textBox2.DataBindings.Add("Text", bs1, "Name");
        }

        private void textBox2_LostFocus(object sender, EventArgs e)
        {
            textBox1.DataBindings.Clear();
            textBox1.DataBindings.Add("Text", bs1, "Name");
        }
于 2013-02-22T14:16:02.493 回答