1

同じ BindingSource を使用する 2 つの TextBox があります。1 つの 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

以下のメソッドをコードに追加してください...動作します...

FormDesigner.cs

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

Form.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 に答える