Winformsには2つのテキストボックスがあります。 textBox2
は、プロパティUnitにバインドされます。 ユニットまたはtextBox2
の変更がそれぞれtextBox2
またはユニットを自動的に更新することを希望します。しかし、それはしません。 ここにWinformのコードの3つのバージョンがあります。結合1つのセットデータは、それは二つの方法の自動更新を持つことになりますが、イベントハンドラ、イベントハンドラWinforms双方向のデータボックスDataBindingが正常に動作しない
textBox2
を更新するためにハードコードで
public partial class Receiver : Form, INotifyPropertyChanged
{
private int unit=0;
public int Unit
{
get { return unit; }
set
{
if (value != unit)
{
unit = value;
}
}
}
public Receiver()
{
InitializeComponent();
textBox2.DataBindings.Add("Text", Unit, "Unit");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
//textBox1 change makes Unit change,
//I wish the change will be displayed in textBox2 automatically
Unit = Convert.ToInt32(textBox1.Text);
}
}
バージョン2が動作しません願ってい
バージョン
しかし、textBox2
の変更は、自動的にユニットを更新しません。
バージョン3なぜイベントハンドラを使用するのか、このようにするだけです。
public partial class Receiver : Form, INotifyPropertyChanged
{
private int unit=0;
public int Unit
{
get { return unit; }
set
{
if (value != unit)
{
unit = value;
textBox2.text = unit.toString();
}
}
}
public Receiver()
{
InitializeComponent();
textBox2.DataBindings.Add("Text", Unit, "Unit");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
Unit = Convert.ToInt32(textBox1.Text);
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
Unit = Convert.ToInt32(textBox2.Text);
}
}
}
バージョン2とバージョン3は問題がある、textbox1
への変更はtextbox2
に更新が発生します。それはCPUサイクルの多くを引き起こします。マウスフォーカスがtextBox1
のままになってからアップデートを行うのが最善の方法です。だからそれを行う方法?