当前位置: 首页 > 知识库问答 >
问题:

如何从UserControl中创建的textbox中获取值

燕超
2023-03-14

我有一个UserControl,其中有两个文本框。用户可以根据需要添加这些UserControls的多个副本。每个UserControl都添加到面板的底部。如何从这些用户控件中获取信息。

这是添加我当前使用的UserControl的代码:

        private void btnAddMailing_Click(object sender, EventArgs e)
        {
            //Set the Panel back to 0,0 Before adding a control to avoid Huge WhiteSpace Gap
            pnlMailingPanel.AutoScrollPosition = new Point(0,0);

            /*I know this isn't the best way of keeping track of how many UserControls 
            I've added to the Panel, But it's what i'm working with right now.*/
            int noOfMailings=0;
            foreach (Control c in pnlMailingPanel.Controls)
            {
                if (c is MailingReference)
                    noOfMailings++;
            }
            //Add the New MailingReference to the bottom of the Panel
            /*1 is the type of Mailing, noOfMailings Determines how many mailings we've sent for 
            this  project*/
            MailingReference mr = new MailingReference(1, noOfMailings);
            mr.Location = new Point(MRXpos, MRYpos);
            MRYpos += 120;
            pnlMailingPanel.Controls.Add(mr);
        }
public partial class MailingReference : UserControl
{
    public String Date
    {
        get { return txtDate.Text; }
        set { txtDate.Text = value; }
    }
    public String NumberSent
    {
        get { return txtNoSent.Text; }
        set { txtNoSent.Text = value; }
    }
    /// <summary>
    /// Creates a Panel for a Mailing
    /// </summary>
    /// <param name="_letterType">Type of 0 Letter, 1 Initial, 2 Final, 3 Legal, 4 Court</param>
    public MailingReference(int _letterType, int _mailingNo)
    {

        InitializeComponent();

        //alternate colors
        if (_mailingNo % 2 == 0)
            panel1.BackColor = Color.White;
        else
            panel1.BackColor = Color.LightGray;
        switch (_letterType)
        {
            case 1:
                lblLetter.Text = "Initial";
                break;
            case 2:
                lblLetter.Text = "Final";
                break;
            case 3:
                lblLetter.Text = "Legal";
                break;
            case 4:
                lblLetter.Text = "Court";
                break;
            default:
                break;

        }
        lblMailingNumber.Text = _mailingNo.ToString();
    }

    private void label1_Click(object sender, EventArgs e)
    {
        this.Parent.Controls.Remove(this);
    }
 foreach (Control c in pnlMailingPanel.Controls)
        {
            if (c is MailingReference)
            {
                foreach (Control c2 in MailingReference.Controls)
                {
                    //do work
                }
            }
        }

以从文本框中获取数据,但MailingReference.Controls不存在。

我不确定如何遍历每个MailingReference UserControl,并从每个文本框中的两个文本框中获取数据。有什么提示吗?

共有1个答案

包沈义
2023-03-14

据我所知,您的主要错误是试图通过类名访问实例属性controls。您应该有以下内容:

foreach (Control c in pnlMailingPanel.Controls)
{
    MailingReference mailingReference = c as MailingReference;

    if (mailingReference != null)
    {
        foreach (Control c2 in mailingReference.Controls)
        {
            //do work
        }
    }
}
 类似资料:
  • 我有一个窗口,每个类型有不同的项目和不同的视图。我想从内容控件后面的代码访问窗口(父)中的按钮。 OutputConfigView: OutputRenderReview.xaml.cs: 在本例中,parentWindow为空。 如何从控件后面的代码访问调用窗口的按钮?

  • React Apollo Mutations允许我创建一个组件,该组件采用MutationResult作为道具:https://www.apollographql.com/docs/react/api/react-apollo.html#mutation-render-prop 现在,如果我要使用由graphql()创建的高阶组件 我的组件将只有作为道具。如何将获取到组件中?

  • 我有一个LandingPage,它使用ChartJs动态加载图表。 我需要得到点击的图表和它的属性值。 定义图表的代码位于检索到的动态生成列(bootstrap)的循环中: onClick事件调用一个模态弹出窗口并设置它的元素,但我需要得到正确的图表(每个图表都有不同的画布id) 谢谢

  • 我试图用web表单做一个web调查应用程序。问题是我在调查创建部分有麻烦。

  • 我试着把一个简单的viewModel交给一个composable,每次出现这个错误,我都不知道这意味着什么: 我的分级: 我创建了一个文件 并将其设置在清单中。 我创建了文件: 然后在我的中设置并创建一个,如下所示: 在我的导航中的处调用: null