在Windows窗体中创建和读取多个文本框的最佳方法是什么?在我的应用程序中,我有一个Windows窗体,客户可以在其中输入多个地址,电子邮件地址
现在我有一个这样的表格,
TextBoxAddress1 TextBoxEmail1
TextBoxAddress2 TextBoxEmail2
.....
.....
.....
TextBoxAddressN TextBoxEmailN
为此,我在一个表单上拖放了多个控件,并为每个控件命名。
如果我使用这种方法,我必须编写冗长的代码来查看是否填充了第一行(TextBoxAddress1 TextBoxEmail1)以进行验证,即使是阅读,我也必须编写多行代码。
有没有更好的方法来实现这一目标?
答案 0 :(得分:2)
您可以使用以下代码动态地向表单添加TextBox
:
private int m_CurrTexboxYPos = 10;
private List<TextBox> m_TextBoxList = new List<TextBox>();
private void CreateCheckBox()
{
m_CurrTexboxYPos += 25;
TextBox textbox = new TextBox();
textbox.Location = new System.Drawing.Point(0, m_CurrTexboxYPos);
textbox.Size = new System.Drawing.Size(100,20);
Controls.Add(textbox);
m_TextBoxList.Add(textbox);
}
答案 1 :(得分:1)
我有一个列表框/列表视图,其中包含您的电子邮件和添加/编辑/删除按钮,这些按钮显示一个弹出窗体 - 用于验证电子邮件的逻辑等等将在一个地方,您的列表可以增长而无需您添加控件到表单。
你可以动态创建文本框 - 但是你最终会编写代码以确保它们在表单上很好地布局等等 - 拥有某种类型的列表更容易IMO并且还有助于绑定(例如,对于电子邮件对象)< / p>
答案 2 :(得分:1)
动态添加控件非常简单,前提是您可以使用DockStyle
和独占容器(例如Panel
)。如果您无法使用DockStyle
,那么您需要编写逻辑来确定Location
和Size
(这不好玩)。
在一个简单的表单上,我有两个按钮和一个面板,Button1
添加了一个新的TextBox
到Panel1
,Button2
遍历{{1}中的控件然后检查它们是否是正确的类型或引发异常。这是您放置验证或读取逻辑的地方。 Panel1需要Panel1
,否则您将从可查看的屏幕上运行控件。
此概念可以切换为继承自AutoScroll = true;
(所有.Net本机控件或您自己的自定义控件)的任何内容。
UserControl
答案 3 :(得分:0)
为您需要的每个分组编写用户控件。至少有一个用于地址,一个用于电子邮件等,然后所有验证,对数据库访问的调用都包含在一个位置
这只是好的设计。这样,如果您有多个标签,例如家庭信息,工作信息,紧急联系信息,您可以将它们放在表单上。这对于用户个人资料来说非常常见。
然后在用户个人资料页面上的每个分组列表视图或其他任何已编辑/删除/添加的列表视图,然后弹出一个包含相应用户控件的对话框。
答案 4 :(得分:0)
最简单的说,ListBox adove TextBox with Button。
此外,您可以使用DataGridView,BuiltIn功能进行添加\编辑\删除。
此处使用DataGridView(ShowHeader设置为false,EditMode
设为On Enter
,AutoSizeMode
属性中有一列Fill
答案 5 :(得分:0)
你拥有的可重复代码越少,程序员就越好。
每当你看到模式(可重复的东西)时,你可以尝试优化它。除非它太小而无法担心。
在您的情况下,首先确定可重复事物的基本内容。你总是要输入地址和电子邮件地址吗?然后将它们组合成一个控件,可以进行验证。您是否经常使用此控件(或重复N次)?那么也许切换到列表是有意义的(ListBox
,ListView
或DataGridView
)。
你是否懒得来打扰配置?然后只需优化显然会重复的内容:将验证放入常用方法并从每个TextBox
事件中调用它。或者使用方法内置创建自己的TextBox
。或者使用循环在Ok
按钮事件中立即进行验证..或者不使用循环。
要找到最佳方法,您必须首先确定谁最适合。因为顾客想要一些有光泽,易于使用,动画,猫和胸部的东西..好吧,没有猫和胸部。重点是:您愿意为客户做出最好的工作。
如果我必须输入 table 数据(或表格中的数据),我会选择DataGridView
,所以它看起来像这样......或者更好: