【问题标题】:How to Get Data From User Control on Form如何从表单上的用户控件中获取数据
【发布时间】:2019-09-10 22:57:42
【问题描述】:

我正在使用 C# 在 Visual Studio 2010 中构建一个简单的应用程序,我这样做是为了熟悉用户控件,因为它似乎比创建多个表单更容易。

在主窗体上有一个下拉列表,其中包含 2 个值,“UCType1”和“UCType2”。我创建了 2 个不同的用户控件。我在主窗体上使用面板根据他们在下拉列表中选择的内容显示用户控件。

我能够根据用户选择显示适当的用户控件,但现在我遇到了一些问题。我无法让主窗体从用户控件中读取数据。

假设主窗体上有一个按钮“Execute”和一个标签“Warning”。用户控件上有一个文本框“Name”。

场景是:当用户点击“Execute”时,如果“Name”为空,“Warning”会显示一些错误信息。

我试图在主窗体上使用if(UserControl1.Name.Text == ""),但我什至不能这样引用它。

我知道我可以创建单独的表单以使其更容易,因为这会使所有变量都在同一个文件中,但我想知道是否有办法通过用户控制来做到这一点,因为我想熟悉它.

谢谢

这就是我显示用户控件的方式

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    UCType1 uc1 = new UCType1();
    panel1.Controls.Clear();
    panel1.Controls.Add(uc1);
}

当我试图显示来自用户控件的数据时

private void executeButton_Click(object sender, EventArgs e)
{
    UCType1 uc1 = new UCType1();
    warning.Text = uc1.Name;
}

什么都没发生。

【问题讨论】:

  • 这对你有用吗??

标签: c# forms user-controls


【解决方案1】:

UserControl 中创建一个公共属性,该属性设置或获取TextBox 文本。喜欢

    public String Name
    {
        get { return textBox1.Text;  }
        set { textBox1.Text = value; }
    }

现在您可以从表单中访问名称。喜欢:

if(UserControl1.Name == "")

【讨论】:

  • 在我的主窗体上,我使用了 UserControl uc1 = new UserControl();警告.文本 = uc1.Name;但警告标签中没有显示任何内容。
  • 你在哪里写 `warning.Text = uc1.Name;
  • 它不会让我编译,因为没有声明 uc1。显示用户控件在 ComboBox_SelectedIndexChanged() 中声明,warning.Text 在 Execute 中设置,2 个不同的函数:/
  • 在任何方法之外将 uc1 声明为类变量。然后初始化并使用你想要的任何方法。
【解决方案2】:

你的代码有问题,你正在再次创建控件对象而不是使用现有的控件对象

UCClientType1 uc1 = new UCClientType1();//access exsting object do not create new
warning.Text = uc1.Name;

因为我在 serach 下面为您添加的控件提供了更新,而不是访问值

你需要这样做

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    UCType1 uc1 = new UCType1();
    uc1.Name = "uc1";
    uc1.Id = "uc1";
    panel1.Controls.Clear();
    panel1.Controls.Add(uc1);
}

方法中的代码更改应该是这样的

private void executeButton_Click(object sender, EventArgs e)
{
    UCClientType1  uc =frm.panel1.Controls.FindControl("uc1",true) as UCClientType1;
    if(uc1 != null)
    warning.Text = uc1.Name;
}

只需在您的用户控件中使用以下代码即可从

访问父级
Form parentForm = (this.Parent as Form);
var data = parentForm.textbox1.Text;

如果您想在主窗体中加载用户控件,则可以这样做

 UserControl uc =frm.Controls.FindControl("myusercontrol",true);
 from.warning.Text = uc.Textbox1.Text;

【讨论】:

  • 如果我从未真正命名它,我应该在“myusercontrol”中添加什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2013-11-10
  • 2017-04-04
  • 1970-01-01
相关资源
最近更新 更多