Как получить доступ к элементам управления на размещенной форме в пользовательском элементе управления 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;
        }
    }
}
Другие вопросы по тегам