wpf - F# WPF 脚本,在按钮单击时绘制图形

标签 wpf winforms f# drawing

我正在尝试使用 F# 脚本,我只想通过单击简单的按钮在空白 Windows 窗体上绘制线条。希望您能在这里看到我想做什么:

open System.Drawing
open System.Windows.Forms

let form = new Form(Width = 400, Height = 400, Text = "draw test")
let panel = new FlowLayoutPanel()
form.Controls.Add(panel)

let paint(e : PaintEventArgs) =
    let pen = new Pen(Color.Black);  
    e.Graphics.DrawLine(pen, new PointF(100.0f, 100.0f), new PointF(200.0f, 200.0f))

let button = new Button()
button.Text <- "Click to draw"
button.AutoSize <- true

button.Click.Add(fun _ -> form.Paint.Add(paint)) // <- does not draw a line on click

panel.Controls.Add(button)

//form.Paint.Add(paint) <- here, if uncommented, it will draw a line when the script is run
form.Show()

如果我将 form.Paint.Add(paint) 取消在 form.Show() 上面的注释,那么它当然会在表单上绘制,但我我正在尝试通过单击按钮来完成此操作。我不太清楚如何在这样的脚本中实现这一点,并且我一直在 F# 中寻找类似的示例。任何帮助将不胜感激。

最佳答案

如果您在第一次绘制表单之前添加 Paint 事件处理程序,那么它将使用该处理程序进行绘制。

如果您在之后添加它,则需要确保表单随后自行重绘。例如,您可以对其调用 RefreshInvalidate 。 例如:

button.Click.Add(fun _ -> form.Paint.Add(paint); form.Invalidate()) 

关于wpf - F# WPF 脚本,在按钮单击时绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49547361/

相关文章:

c# - Windows Server 2008 中没有气球工具提示关闭按钮

f# - 如何在 F# 中拥有多个用于列表推导式的生成器?

c# - 使用 F# 实现 C# 异步接口(interface)

c# - 绑定(bind)到数据网格的 ObservableCollection - 使用工厂方法

c# - 防止 ComboBox 下拉和它的 AutoComplete 下拉外观冲突

c# - 通过 INotifyPropertyChanged 写入 TextBox 无效

c# - 加载图标/进度条

visual-studio - 如何在 Visual Studio 2017 版本 15.3 中使用 F#?

wpf - ListView 数据绑定(bind)以显示用户控件

wpf - 用 WPF 应用程序替换 Windows shell