我正在构建一个新的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;
}
这样的事情可能吗?这样的事情存在吗?
答案 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个文本框,名为txtFirstname
和txtLastname
(您可以在设计器中证明):
您的代码如下所示:
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