2017-06-09 70 views
-1

私はC#を初めて使用していますが、私はWindowsフォームを使用しています。flowLayoutPanelのコントロールの範囲を削除する方法C#

私はflowLayoutPanelを持っています。それに静的に6 buttonsを追加し、実行時にもう一度buttonsを追加します。

button(flowLayoutPanelのボタン)をクリックせずに、その場所/インデックスに基づいてbuttons(実行時に作成されたもの)の範囲を削除します。 例:私はすでに6 buttonsを静的に追加していましたが、実行時にはさらに10個追加しました。合計8個と12個の間にbuttonsを削除したいとします。buttons(合計16個)私はflowLayoutPanelの各コントロールにindexがあり、私がbuttonsのインデックスを知っていれば参考になると思います。

private void RemoveSomeButtons_Click(object sender, EventArgs e) 
{ 
    //Remove buttons between the 8th and 12th 
} 

どのようにすればよいのですか?今、あなたは、インデックスを持って、そのリストに、実行時に作成された各ボタンを追加し

static List<Button> myButtonsList; 

void InitializeButtons() { 
    for (int i = 0; i <= 6; i++) { 
     Button b = new Button(); 
     flowLayout.Controls.Add(b); 
     myButtonsList.Add(b); 
    } 
} 

そして:
は、あなた自身が、あなたの静的に追加ボタンを格納するためのリストを作成してインデックスにこれらのコントロールを必要とする

+1

対象とするもの:Winforms、WPF、ASP ..? __Always__あなたの質問に正しくタグを付けてください! – TaW

+0

@ TaW。私が言ったようにWindowsフォーム。 – user8074669

+0

__Tag__それから! – TaW

答えて

1

ありがとう、各ボタンに割り当てられ

void CreateButtonAtRuntime() { 
    Button b = new Button(); 
    flowLayout.Controls.Add(b); 
    myButtonsList.Add(b); 
} 

void DeleteButtons(int fromInd, int toInd) { 
    for (int i = toInd; i >= fromInd; i--) { 
     Button b = myButtonsList[i]; 
     flowLayout.Controls.Remove(b); 
     myButtonsList.RemoveAt(i); 
    } 
} 
1

そのインデックスに基づいてコントロールを削除

private void RemoveControls(FlowLayoutPanel panel, int first, int last) 
{ 
    for (int i = first; i <= last; i++) 
     panel.Controls.RemoveAt(first); 
} 
+0

パネルに他のコントロールがある場合はどうなりますか?また、あなたのメソッドは4番目のコントロールを削除し、4番目のコントロールはすべて1番目のコントロールに、5番目のコントロールは6番目のコントロールを削除し、5番目のコントロールは元に戻り、これも 'IndexOutOfRangeException'を引き起こします。 –

+0

彼は指数でコントロールを削除したいと言っています。だから彼はどのようなコントロールがパネルにあるのか知っている。そして、私は最初の要素を削除します(あなたの例では4回目のN回) –

+0

ああ、ごめんなさい、ごめんなさい –

関連する問題