2017-12-18 38 views
-1

私はユーザーが作成するパスの数がわからないので、配列の代わりにGraphicsPathのリストを使用しようとしています。この後List <GraphicsPath>はC#で使用できますか?

List<GraphicsPath> PathDB = new List<GraphicsPath>(); 

次のように私はリストを埋める:Countプロパティが正しいことながら、私はので、以下のようなオブジェクトを使用することはできません、

using(GraphicsPath myPath = new GraphicsPath()) 
{ 
    myPath.AddPolygon(myPoints); 
    PathDB.Add(myPath); 
} 

をしかし、私はリストからGraphicsPathを使用しようとすると、引数の例外です。

num = PathDB.Count; 
for(int k=0; k < num; k++) 
    { 
     using(GraphicsPath myCurrentPath = new GraphicsPath()) 
     { 
     myCurrentPath = PathDB[k]; 
     myCurrentPath.AddLine(0,0,400,400); //at this stage exception is thrown 
     myGraphics.DrawPath(myPen, myCurrentPath) 
     } 
    } 

DisposabeであるGraphicsPathに関連するものはありますか?またはsmtを間違っている?

+1

例外は何を表していますか?そして、はい、オブジェクトは処分されますので、もう使用しないでください。あなたはそれで何を達成しようとしていますか? –

+1

それを使用することはまったく意味がありません。もちろん、そのリストに格納されているものは破棄してはいけません。リストから削除されたときに行わなければなりません。 C#は大混乱を起こさないほどスマートですが、おそらく他の場所でもそうしています。 –

+0

私はそれを取得しません。あなたのループ内で新しいインスタンスを作成し、変数を既存の値で上書きしてから、それを使わずに新しく作成した値を捨てるのはなぜですか?あなたが実際に何を使っているのか(あるいはあなたのコードが何をしているのか)は明確ではないようです。 – Sefe

答えて

3
using(GraphicsPath myPath = new GraphicsPath()) 
{ 
    myPath.AddPolygon(myPoints); 
    PathDB.Add(myPath); 
} // this disposes myPath 

これはローカルグラフィックパスです。あなたのusingブロックDisposeそれがスコープの後にあればそれはそれです。したがって、を削除すると、ブロックusingブロックが削除され、不要になったときにパスが破棄されます。