1

FlowLayoutPanelがあり、ID(文字列)のリストと現在のプログレスバー(整数)の位置からProgressBarsで更新したいと思います。このリストをリストと呼びます

FlowLayoutPanel.Controlsリストと比較する必要があります

  • FlowLayoutPanel.Controls新しいIDが検出された場合は、そのID(名前)を使用してコレクションに新しいコントロールを作成する必要があります。
  • コレクション内のコントロールのリストFlowLayoutPanel.Controls対応する名前がない場合は、コントロールを削除して破棄する必要があります。
  • 両方のコレクションにあるコントロールを更新する必要があります(リストaの整数からのProgressBarの進行状況)

私が困っているのは、FlowLayoutPanel.Controlsコレクションに一般的なリストほど多くのメソッドがないため、インターネットからのガイドを実際にたどることができないことです。

私がこれをどのように行うべきか私を助けてくれますか?

ありがとう!

編集:DJ KRAZEコメントへの返信:私はリストと似たようなものを作りましたが、私が言ったように、コントロールコレクションにはリストのようにいくつかのメソッドがありません。これが私のコードです(動作しない可能性があります。理解しやすいように書き直しました):

//古いものを削除します

// Make a new list of IDs, where none of the IDs from myList1 can be found in myList2
var remove = myList1.Where(f => !myList2.Any(g => g == f.ID));

//Do some operation for the object which is about to get removed
foreach (Object obj in remove)
{
    // Some operation           
}
// remove from list
myList1.RemoveAll(i => remove.Contains(i));

//重複を削除します

// Remove Duplicates from myList2, so only the remaining object are to be started
myList2.RemoveAll(f => myList2.Any(g => g.ID == f));

//myList2からmyList1に残りのオブジェクトを追加します

foreach(Object obj in myList2)
{
// add to myList1 and do some operation, like starting it
}
4

2 に答える 2

3

System.Linqすべての拡張メソッドに含めます。

于 2012-12-19T16:18:12.527 に答える
1

FlowLayoutPanel(および他のコンテナコントロールの)コントロールコレクションは実装されませんIEnumerable<T>が、非ジェネリックのみが実装されIEnumerableます。したがって、exensionメソッドを使用してに変換IEnumerableします。次に、たくさんのLINQをすべて使用できます。IEnumerable<T>Cast<T>

 flowLayoutPanel1.Controls
     .Cast<Control>()
     .Where(c => c.Name == "...")
     .OrderBy(...)
     ...

注:ほとんどのLINQ拡張メソッドは。を拡張しIEnumerable<T>ます。

于 2012-12-19T16:47:04.003 に答える