2

我有两种形式。单击 form1 上的按钮打开 form2,用户在其中添加详细信息并将其返回到 form1,信息存储到List并创建 TextBoxes 和其他界面元素。

我有 5 个不同级别的选项卡,但添加的信息是相同的。

如何避免使用 5 次创建类似的代码

if (level==5) {//do this whole code again}

添加的元素示例:

int _nextTextBoxTop=15;
List<TextBox> CodesMy = new List<TextBox>();

var code = new TextBox();
CodesMy.Add(code);
code.Location = new Point(12, _nextTextBoxTop);
_nextTextBoxTop += 36;
code.Size = new Size(80, 25);
code.Text = mcode;
tabPageLevel5.Controls.Add.Controls.Add(code); 
4

2 回答 2

2

最简单的解决方案可能是将您的元素创建重构为一个单独的函数,如下所示:

CreateControls(TabPage tabPage)
{
var code = new TextBox();
CodesMy.Add(code);
code.Location = new Point(12, _nextTextBoxTop);
_nextTextBoxTop += 36;
code.Size = new Size(80, 25);
code.Text = mcode;
tabPage.Controls.Add.Controls.Add(code);     
}

您的客户端代码将如下所示:

if (level==5) {CreateControls(tabPageLevel5);}

比动态添加控件更简单的方法是创建用于每个标签页的用户控件。

即使您需要动态添加控件,您仍然可以使用用户控件执行此操作,并在每个附加标签页每次克隆它。

于 2012-05-03T18:28:50.457 回答
1

您不应该绝对指定职位。创建一个FlowLayoutPanel并将每个新文本框(或带有代表要添加的新“事物”的所有控件的用户控件)添加到该面板,以便将它们添加到前一个文本框的下方。

您将FlowLayoutPanel它们添加到哪个选项卡可能会有所不同,具体取决于您要将它们添加到哪个选项卡。您可以将其作为方法的参数,类似于 Paul 的建议,或者您可以有一个 variablecurrentTabpanelInCurrentTab类似设置适当的东西,然后是一个简单地将新控件添加到该容器的方法。

于 2012-05-03T18:29:13.500 回答