【问题标题】:Interaction between two user controls in windows form applicationWindows窗体应用程序中两个用户控件之间的交互
【发布时间】:2015-07-20 02:48:36
【问题描述】:

我创建了两个用户控件,分别称为UserControl1UserControl2UserControl1 包含TextBox1UserControl2 包含Button1。在UserControl2 中,当单击Button1 时,我想从UserControl1 获取TextBox1.Text

这是相关的代码: 在UserControl1:

 public partial class UserControlA: UserControl
{
    public UserControlA()
    {
        InitializeComponent();
    }

    public string TexBoxText
    {
        get
        {
            return this.textBox1.Text;
        }
    }
}

UserControl2:

 public partial class UserControlB: UserControl
{
    public UserControlB()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //here is to get textbox1.text
    }
}

我该怎么办?

【问题讨论】:

  • 您是否在UserControlA 上公开了一个属性以获得TextBox1Text 值? TextBox1 无法从外部访问,因此您需要在 UserControlA 上创建一个函数或属性才能从 UserControlB 访问它。
  • UserControl1 需要对 UserControl2 的引用,或者相反
  • 我创建了TextBoxText 属性以获取TextBox1Text
  • matcheek,以哪种方式创建对UserControl1的引用??

标签: c# .net winforms user-controls


【解决方案1】:

一个选项是将 UserControlA 实例传递给 UserControlB 的构造函数。

public partial class UserControlB: UserControl
{
    UserControlA userControlA;

    public UserControlB(UserControlA ucA)
    {
        userControlA = ucA;
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string myString = userControlA.TexBoxText;
    }
}

【讨论】:

  • 行内UserControlA userControlA;出现错误,在UserControlB中找不到UserControlA
  • @TuanNguyen:你遇到了什么错误?希望两个 UserControl 都在同一个命名空间中?
  • 两个UserControl不在同一个命名空间,我创建了Windows Forms Control Library来创建两个User Control
  • @TuanNguyen:那么你必须导入命名空间,即:using xxx.xxx.UserControlA;
  • 你的意思是我必须添加对 UserControlB 的引用??
【解决方案2】:

UserControl1:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }
    public TextBox TextBox
    {
        get
        {
            return textBox1;
        }
    }
}

UserControl2:

public partial class UserControl2 : UserControl
{
    private TextBox txt = null;
    public UserControl2()
    {
        InitializeComponent();
    }
    public TextBox TextBox
    {
        set
        {
            txt = value;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (txt != null)
            MessageBox.Show(txt.Text);
    }
}

在上述控件的容器中:

uc2.TextBox = uc1.TextBox;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多