У меня есть форма с TextBox:
Form f = new Form();
TextBox t = new TextBox ();
t.Click += new EventHandler(t_Click);
t.LostFocus += new EventHandler(t_LostFocus);
Testus tt = new Testus();
t.DataBindings.Add("Left", Testus , "X");
t.DataBindings.Add("Text", Testus , "Test");
f.Controls.Add(t);
f.ShowDialog();
И класс Testus вот так:
class Testus
{
public string Test
{
get
{
return _text;
}
set
{
Console.WriteLine("Acomplished: text change");
_text = value;
}
}
private string _text;
public int X
{
get
{
return x;
}
set
{
Console.WriteLine("Acomplished: X changed");
x = value;
}
}
int x;
public Testus()
{
}
}
Как видите, я привязываю свой TextBox к классу Testus. В частности, я привязываю TextBox.Left к Testus.X и TextBox.Text к Testus.Test. Я хотел бы заявить, что изменение значения Controls Left повлияет на значение Testus.X и наоборот. И то же самое для TextBox.Text против Testus.Test.
Я добавил обработчики для Click и LostFocus моего элемента управления TextBox следующим образом:
static void t_LostFocus(object sender, EventArgs e)
{
Console.WriteLine("TextBox lost focus");
}
static void t_Click(object sender, EventArgs e)
{
Console.WriteLine("Moving to right...");
((Control)sender).Left = 100;
}
И я делаю этот тест:
- запустить приложение
- ввод текста в TextBox
- Изменить фокус на другой элемент управления
И я получаю эти результаты в консоли:
TextBox lost focus
И это все! Testus.Test не меняет своего значения!?
Но когда я сделаю это:
- запустить приложение
- нажмите на текстовое поле (изменить левое значение)
Я получаю такие результаты:
Moving to right...
Acomplished: X changed
Кажется, что Binding Left to X работает. И текста для проверки нет. И когда я поменяю местами привязки на эту:
t.DataBindings.Add("Text", Testus , "Test");
t.DataBindings.Add("Left", Testus , "X");
Чем работает Привязка к тексту, а привязка к X не работает. Итак, в заключение: только первая DataBinding работает.
Итак, мой вопрос: как связать два свойства TextBox (Left, Text) с двумя свойствами моего объекта (Testus) (X, Test), чтобы он работал хорошо?