フォーム上でさまざまな種類の形状を作成、クリック、ドラッグできる「2dShapeEditor」というプロジェクトを行っています。私が現在いるプロジェクトの段階で、対象の四角形がどのようなタイプであるかを判断する必要があります。「オプション」として初期化されますが、クリックされた特定の長方形に「最もヒットした」変更を行うことができます。
次に、この四角形に move メソッドを適用して、マウスで移動させます。
私のタイプ RectangleZ
type RectangleZ(x:int, y:int)=
let mutable thisx = x
let mutable thisy = y
let mutable thiswidth = 50
let mutable thisheight = 20
let brush = new SolidBrush(Color.Black)
member obj.x with get () = thisx and set x = thisx <- x
member obj.y with get () = thisy and set y = thisy <- y
member obj.width with get () = thiswidth and set width = thiswidth <- width
member obj.height with get () = thisheight and set height = thisheight <- height
member obj.thisColor = Color.FromArgb(167, 198, 253)
member obj.draw(paper:Graphics) = paper.FillRectangle(brush, thisx, thisy, 50, 20)
member obj.ShapeType = "Rectangle"
私の最もヒットした方法:
let rec getShape (e:MouseEventArgs) (inputl:List<RectangleZ>) = match inputl with
|[] -> None
|s::tail->if(((e.X >= s.x) && (s.x <= (s.x + s.width))) && ((e.Y >= s.y) && (e.Y <= (s.y + s.height)))) then Some(s) else getShape e tail //Some(s)
私のターゲットの四角形は次のようになります。
let mutable targetedRec = None
私の「Move()」メソッドは次のようになります。
let Move (e:MouseEventArgs) = if(targetedRec = None) then None else targetedRec.Value.x <- e.X
targetedRec.Value.y <- e.Y
「Move()」メソッドは、「このプログラム ポイントより前の情報に基づいて不定型のオブジェクトを検索します。オブジェクトの型を制約するために、このプログラムの前に型注釈が必要になる場合があります。これにより、ルックアップが解決されます。」
そして、はい、コンパイラは何が間違っているのか、それを修正する方法のヒントを与えてくれます。私はマッチングを試みました。TargetedRec の Option タイプを削除し、それを "RectangleZ" のタイプとして配置すると、if ステートメントを空白のままにできないため、多くのプロジェクトが失敗します。助言がありますか?