gpt4 book ai didi

c# - F# GUI问题(将C#翻译成F#)

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:00 26 4
gpt4 key购买 nike

我正在将 C# 项目转换为 F#。虽然逻辑部分很简单,但我对 GUI 部分感到困惑:

public partial class GomokuGUI : Form {
private void GomokuGUI_Load(object sender, EventArgs e)
{
this.Width = 500;
this.Height = 550;
...
this.Paint += new PaintEventHandler(GomokuGUI_Paint);
Graphics gp = this.CreateGraphics();
DrawChessbord(gp);
}

private void GomokuGUI_Paint(object sender, PaintEventArgs e)
{
Graphics gp = e.Graphics;
DrawChessbord(gp);
}

void DrawChessbord(Graphics gp)
{
float w, h;
SolidBrush br = new SolidBrush(linecolor);
Pen p = new Pen(br, frame);
gp.DrawLine(p, 20, 45, this.Width - 25, 45);
...
}

private void Form1_Click(object sender, EventArgs e) {
Graphics gp = this.CreateGraphics();
DrawChess(gp);
...
}
}

问题:如何在 F# 中编写上述 C# 代码...谢谢

最佳答案

请注意,F# 没有任何 WinForms 设计器,因此如果您在表单中有一些控件,则需要手动创建它们(或者您可以在 C# 中设计表单,编译它并从 F# 中引用它) .你可以从这样的事情开始:

type GomokuGUI() as this =
inherit Form(Width = 300, Height = 550)

let DrawChessbord (gp:Graphics) =
let br = new SolidBrush(linecolor)
let p = new Pen(br, frame)
gp.DrawLine(p, 20, 45, this.Width - 25, 45)
// ...

let paintGui (e:PaintEventArgs) =
let gp = e.Graphics
DrawChessbord(gp)

do
this.Paint.Add(paintGui)
this.Click.Add(fun _ ->
let gp = this.CreateGraphics()
DrawChess(gp)
(* ... *) )

它使用了一些有趣的东西:

  • 调用基类构造函数时,可以在构造函数中指定WidthHeight等参数。
  • 你需要在类声明中使用as this,这样你就可以在do代码(在构建期间运行)中引用该类
  • 您可以使用 Add 来注册事件处理程序,您可以给它一个命名函数(例如 patinGui)或者一个 lambda 函数,如果您只需要做一些简单的事情调用(例如处理 Click)

关于c# - F# GUI问题(将C#翻译成F#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com