2

私には2つのフォームがあります。form1 のボタンをクリックすると、ユーザーが詳細を追加する form2 が開きます。これは form1 に返され、情報が保存されList、TextBox やその他のインターフェイス要素が作成されます。

レベルごとに 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を追加する先は、追加するタブによって異なります。ポールの提案と同様に、メソッドのパラメーターにするか、 variablecurrentTabなどpanelInCurrentTabを適切に設定してから、新しいコントロールをそのコンテナーに追加するだけのメソッドを作成できます。

于 2012-05-03T18:29:13.500 に答える