【问题标题】:How to access controls on hosted form in a user control WinForm如何在用户控件 WinForm 中访问托管表单上的控件
【发布时间】:2016-03-05 03:50:50
【问题描述】:

在 Visual Studio 中,如何访问托管用户控件的表单上的控件?例如,当用户控件中的文本框中的文本发生更改时,我希望另一个用户控件中的另一个文本框中的文本发生更改。这两个用户控件都托管在同一个表单上。提前致谢!

【问题讨论】:

  • 从您的 userControl 引发一个事件,让表单或其他 UC 订阅该事件。提出一个问题如果它们密切相关,为什么它们在不同的控件上?
  • 你能说得更具体点吗?为什么在设计时需要在 2 个控件之间进行这种集成?
  • Plutonix,它们位于单独的控件上,因为用户能够决定要在表单上显示的用户控件。它可能是其中之一,也可能是两者。如果两者同时显示,则文本需要匹配。
  • Reza,它是一个 SOAP 客户端应用程序,它为用户提供了两种不同的方式来输入数据以发出请求。
  • 如果我需要不同的 UI 进行数据输入,我更喜欢有 2 个具有不同 UI 的控件,但我将为它们使用单​​个数据源并使用数据绑定处理场景。如果您将两个控件绑定到一个数据源,虽然您可以有不同的 UI,但您只有一个数据并且两个控件数据是同步的。我为您的问题分享了一个解决方案:)

标签: c# winforms visual-studio user-controls windows-forms-designer


【解决方案1】:

如果您需要不同的 UI 来输入数据,我更喜欢有 2 个具有不同 UI 的控件,但我将为它们使用单​​个数据源并使用数据绑定来处理场景。

如果您将两个控件绑定到一个数据源,虽然您可以有不同的 UI,但您只有一个数据并且两个控件数据是同步的。

你的问题的答案:

您可以在设置TextTextBox 的每个控件中定义一个属性。然后就可以处理TextBoxTextChanged事件,然后找到另一个控件,设置text属性:

控制1

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;
        }
    }
}

控制2

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;
        }
    }
}

【讨论】:

  • 非常感谢!完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多