如何将winforms应用中的所有表单字段作为一个参数?

时间:2015-08-05 21:37:43

标签: c# forms winforms

我正在构建一个新的WinForms应用程序,并且我有一个用户控件表单,其中包含大约20个表单字段。

在我的这个表单的网页版本中,我只是通过一个formCollection推送所有这些字段,但我不知道在windows窗体中是否有类似的东西(我对winforms有点不同)。

理想情况下,我希望能够有这样的方法:

private void btnSubmit_Click(object sender, EventArgs e) {
    var formFields = **formFieldCollection**;

    var firstName = formFields.FirstName.Text;
    var lastName = formFields.LastName.Text;
}

这样的事情可能吗?这样的事情存在吗?

3 个答案:

答案 0 :(得分:1)

听起来您正试图直接从表单中访问用户控件上的字段。这不是最佳做法,但如果你真的想这样做,这是一种潜在的方式:

无需建立字段集合。通过一些修改,您可以直接访问这些字段。

默认情况下,当您创建用户控件时,您放在其上的所有控件(字段等)都标记为私有,因此无法在用户控件之外访问。 使用适当的(右键单击字段并选择属性),您可以将Modifer从私有更改为公共。然后,您将能够从控件外部访问字段。

例如,如果我有一个名为MyUserControl的用户控件,其中一个字段名为FirstName和LastName,我可以执行以下操作:

private void btnSubmit_Click(object sender, EventArgs e) {
    var formFields = **formFieldCollection**;

    var firstName = MyUserControl.FirstName.Text;
    var lastName = MyUserControl.LastName.Text;
}

就像我说的那样,根本不推荐这样做。用户控件的一部分是在一个单独的实体中包含一组字段/功能,并且只使用定义的公共接口公开您需要的属性和功能。

答案 1 :(得分:1)

Windows窗体中的每个控件都有一个Name属性。在Code-Behind-File(您的事件处理程序所在的文件)中,您可以直接访问它们。假设您有2个文本框,名为txtFirstnametxtLastname(您可以在设计器中证明):

Designer and Document Outline Window

您的代码如下所示:

private void btnSubmit_Click(object sender, EventArgs e) 
{       
    var firstName = txtFirstname.Text;
    var lastName = txtLastname.Text;
}

多数民众赞成。

答案 2 :(得分:0)

当然可以。您可以使用表单的Controls属性来执行此操作 -

private void button1_Click(object sender, EventArgs e)
{
    //get all controls
    var formControls = this.Controls;

    //then get your control with their name as key 
    var button1 = formControls["button1"];
    var firstName = formControls["firstName"];
}

您可以在这里阅读更多内容 -

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.controls(v=vs.110).aspx

enter image description here