私がクリックしたときに、このF#とのWinforms
let form = new Form()
let drawArea = new Panel(Location = new Point(200,0), Height = 600, Width = 800)
let rectBrush = new SolidBrush(Color.Blue)
form.Controls.Add(drawArea)
drawArea.MouseClick.Add(fun args ->
drawArea.Paint.Add(fun e ->
e.Graphics.FillRectangle(rectBrush, args.X, args.Y, 50, 50)))
Application.Run(form)
のようなプログラムがとても青い四角形が表示されています。しかし、これらの矩形はどこに格納されていますか? "drawArea"の一部であるすべての四角形のリストを取得する方法はありますか?
それ以外の場合、パネルまたはsimular winformオブジェクトに子コントローラとして四角形を追加する方法はありますか?
は、私はそのようにこれらの矩形を取得する方法を知らないあなたに
マウスをクリックするたびに、新しいPaintイベントハンドラが追加されます。いいえ、書かれているように長方形を取り出すことはできません。 MouseClickハンドラにリストに矩形を追加させるだけです。 form.Invalidateを呼び出すと、現在動作していないペイントが再描画されます。そして、* one *を使用して、そのリストを反復するイベントハンドラをペイントします。 –
ところで、これの背後にある理由は、Winformsが "即時モード"描画を使用しているためです。 WPFのような他のフレームワークは保持モードを使用します。つまり、後で再利用できるように可視構造を明示的に保存します。 http://msdn.microsoft.com/en-us/library/ff684178(v=vs.85).aspx – wmeyer
ahaも参照してください。情報のおかげで、フォームが即時モードを使用していたか分からなかった。 – OlssN