タイトル : Re^4: Penの操作でエラー(VBS2005) 投稿日 : 2008/05/23(Fri) 09:57 投稿者 : ひでと
遅くなりました。ありがとうございます。 > しかし、Dispose メソッド(正確には、IDisposable インターフェイス)を有する > クラスの場合だけは例外です。IDisposable なクラスの場合には、処理の最後に > Dispose を呼び出して、使い終わった内部リソースを破棄せねばなりません。 > (この処理を自動的にやってくれるのが、Using ステートメントです) Disposeメソッドがあるものは 必須ということですね。分かりました。 (Usingはこれから見てみます) > > なお、Dispose は「内部リソースが破棄される」だけで、 > オブジェクトそのものが解放されるわけではありません。 > > > 開放処理ができていれば dum.pen=pen.Clone でPenの設定をそっくり移す事が > > できますよね。 > Pen.Clone は「同じ設定のペンをもう一本作成する」処理です。 > コピー後のペンもコピー元のペンも、使用後に破棄する必要があります。 破棄するタイミングがいまひとつ分からないのです。 実際の処理ではclsCiecleクラスにPenを持たせて、 それをShapeDrawクラスの中のコレクションに保存しています。 また、clsCircleクラスのTurnメソッドは同じclsCircleのインスタンスを返すメソッド(?) として作っています。実際のShapeDrawクラスの中のコレクションを作る処理はForm1の Button1_Clickで記載し、ShapeDraw(PicturBoxから継承)のPaintイベントで円弧を 描画する処理をしています。 PenをDisposeするタイミングですが、次のようにしてみました。(省略して記載) ただ、これでいいのか?かなり不安なのです。アドバイスをお願いします。 Public Class ShapeDraw Public Circle As New clsCircle Public Circles As New List(Of clsCircle) Public Sub AddCircles(ByVal 中心x As Single, ByVal 中心y As Single, ByVal 半径 As Single, ByVal 始点角 As Single, ByVal 終点角 As Single, ByVal pen As Pen) Dim mCircle As New clsCircle With mCircle .pen = pen.Clone End With Circles.Add(mCircle) End Sub Public Class clsCircle Public pen As New Pen(Color.Black, 1) Public Function Turn(ByVal Angle As Single) As clsCircle Dim dum As New clsCircle dum.pen = pen.Clone pen.Dispose()'ここでclsCircleのpenを破棄 Return dum'ここではdum.penの破棄は行えないはず End Function Public Class Form1 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pen As New Pen(Color.Black, 1) pen.Width = 1 pen.Color = Color.Black pen.DashStyle = Drawing2D.DashStyle.Solid With Me.ShapeDraw1 pen.Color = Color.Red pen.DashPattern = New Single() {10.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F} .AddCircles(100, 100, 50, 90, 360, pen) pen.Color = Color.Green pen.DashStyle = Drawing2D.DashStyle.Solid .AddCircles(200, 200, 50, pen) .Refresh() End With pen.Dispose()'ここでPenの破棄 '.AddCirclesでShapeDrawのCircles As New List(Of clsCircle)に保存されたPenも破棄しなければいけないのだろうか? End Sub End Class |