System.Windows.Forms.Form
F# でカスタマイズされていない (つまり、作成できる派生クラスのインスタンスではなく、既定のフォーム クラスのインスタンスを作成するだけです) を描画しようとしています。
カスタムフォームを作成しましたが、そのような新しい複雑な構造は必要ありませんでした。そのため、それを削除してコードを大幅に簡素化しました。あまりにも多く、画像を表示するのをやめました。
問題は、別の F# プロジェクトにある描画用に作成した関数にあるはずです。提供された順序でconect
ポイントを接続するために(関数)作成しましたが、 とは異なり、まだ気づいていない他の順序でポイント間に線を引きます(ポイントが右から左、上から下など)表されます)。System.Drawing.Graphics.DrawLines
Programa.fs 関連のコード スニペット:
let pen = new Pen(brush = Brushes.Black, width = 1.0f)
let original =
([|new PointF(50.0f, 50.0f); new PointF(100.0f, 50.0f)|])
use form1 = new Form(Width = 400, Height = 400, Text = "Fractais (Teste - Windows Forms)")
form1.Paint.Add(
fun e -> // (1)
original
|> List.ofArray
|> Base.applyFractal 1uy Base.fractalFunc1
|> Base.conect e.Graphics pen)
書かれている代わりにラムダ式に があった場合e.Graphics.DrawLines(pen, original)
、リスト内のポイント間に単純な線が引かれます。
これは、ソリューション全体の Base.fs のトラブルメーカー メソッドです。
let conect (gr:Graphics) (pen:Pen) (points:PointF list) =
let rec usefulFunc (gr:Graphics) (pen:Pen) (points:PointF list) prevPoint =
match points with
| [] -> ()
| point :: remainings ->
gr.DrawLine (pen, prevPoint, point)
usefulFunc gr caneta remainings.Tail remainings.Head
usefulFunc gr pen points.Tail points.Head
そして、Base.fsi 内の (フォーム初期化スニペットから) 呼び出されたメソッドと関連するメソッドのシグネチャ (すべての完全なメソッドの実装を提供できますが、多くのスペースが必要です。読むには長い質問です):
val fractalFunc1 : points:PointF list -> PointF list
val applyFractal : stepNumber:byte -> fractalFunc:(PointF list -> PointF list) -> points:PointF list -> PointF list
val conect : gr:Graphics -> pen:Pen -> points:PointF list -> unit
この特定の問題について、私の検索結果はありませんでした。関数を機能させる方法を知りたいconect
です。
前もって感謝します。