Как получить доступ к элементам управления на размещенной форме в пользовательском элементе управления WinForm
В Visual Studio как получить доступ к элементу управления в форме, содержащей пользовательский элемент управления? Например, когда текст изменяется в текстовом поле в пользовательском элементе управления, я хочу изменить текст в другом текстовом поле в другом пользовательском элементе управления. Оба этих пользовательских элемента управления размещены в одной форме. Заранее спасибо!
1 ответ
Если вам нужен другой пользовательский интерфейс для ввода данных, я предпочитаю иметь 2 элемента управления с различным пользовательским интерфейсом, но я буду использовать для них один источник данных и обрабатывать сценарий с помощью привязки данных.
Если вы связываете оба элемента управления с одним источником данных, в то время как у вас может быть разный пользовательский интерфейс, у вас есть одни данные, и оба элемента управления синхронизируются.
Ответ на ваш вопрос:
Вы можете определить свойство в каждом элементе управления, набор которого Text
из TextBox
, Тогда вы можете справиться TextChanged
событие TextBox
а затем найдите другой элемент управления и установите свойство text:
Control1
public partial class MyControl1 : UserControl
{
public MyControl1() { InitializeComponent(); }
public string TextBox1Text
{
get { return this.textBox1.Text; }
set { this.textBox1.Text = value; }
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Parent != null)
{
var control1 = Parent.Controls.OfType<MyControl2>().FirstOrDefault();
if (control1 != null && control1.TextBox1Text != this.textBox1.Text)
control1.TextBox1Text = this.textBox1.Text;
}
}
}
Control2
public partial class MyControl2 : UserControl
{
public MyControl2() { InitializeComponent(); }
public string TextBox1Text
{
get { return this.textBox1.Text; }
set { this.textBox1.Text = value; }
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Parent != null)
{
var control1 = Parent.Controls.OfType<MyControl1>().FirstOrDefault();
if (control1 != null)
control1.TextBox1Text = this.textBox1.Text;
}
}
}