在Windows窗体上绘制正方形

鲍勃森

我正在尝试使用一系列正方形对象在表格上绘制正方形。

let listOfSquares = ResizeArray()

type square(x : float, y : float) =
  let x = x
  let y = y
  let length = 50
  let height = 50

我正在使用下拉菜单在单击时创建一个正方形,然后我有另一个菜单按钮使表格无效

let square = create.DropDownItems.Add("Square")
let invalidate = file.DropDownItems.Add("Invalidate")
square.Click.Add(fun _ -> listOfSquares.Add(new square(50.0, 50.0)))
invalidate.Click.Add(fun _ -> form.Invalidate())

我遇到的问题是OnPaint方法无法绘制正方形,但是每次单击菜单按钮正方形时,它都会添加到列表中。

  override form.OnPaint e = 
  let g = e.Graphics
  for square in listOfSquares do
  g.FillRectangle(Brushes.Aqua, 300, 150, 48, 48);

我试图手动将值添加到列表中,然后像下面那样运行程序

override form.OnPaint e = 
  listOfSquares.Add(50,50)

  let g = e.Graphics
  for square in listOfSquares do
  g.FillRectangle(Brushes.Aqua, 300, 150, 48, 48);

哪个可行,我相信问题是在form.invalidate上,但对于f#来说还是很新,我找不到问题。

里德·科普西

首先,您需要添加一种从方形类型中提取属性的方法。我个人只是在这里使用记录:

type Square = { X : int; Y : int; Length : int; Height: int }

这样,您的点击处理程序将需要是:

square.Click.Add(fun _ -> listOfSquares.Add({ X = 50; Y = 50 ; Width = 50; Height = 50)))

您的OnPaint方法需要实际绘制正方形:

override form.OnPaint e = 
  let g = e.Graphics
  for square in listOfSquares do
    g.FillRectangle(Brushes.Aqua, square.X, square.Y, square.Length, square.Height);

请注意,这会将所有正方形添加到同一位置,因此将它们堆叠在一起。当然,您希望更改逻辑以每次将它们放置在唯一的位置(更改X和Y)。


编辑:

经过进一步调查,问题实际上是listOfSquares在错误的范围内还有一个额外的let绑定,这导致事件处理程序添加到错误的集合中。这意味着OnPaint重写ResizeArray与事件处理程序的作用不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在PHP中图像的每个角上绘制正方形

来自分类Dev

如何使用OpenGL在中心的按钮上绘制正方形?

来自分类Dev

无法使用 setInterval 在画布上绘制正方形?

来自分类Dev

openGL(c)绘制正方形

来自分类Dev

在圆内绘制正方形布局

来自分类Dev

去图像绘制正方形

来自分类Dev

在Matlab中绘制正方形表面

来自分类Dev

绘制大量正方形的最快方法?

来自分类Dev

绘制大量不同颜色的正方形

来自分类Dev

Matplotlib-以正方形绘制数据

来自分类Dev

如何使用WebGL绘制正方形

来自分类Dev

在OpenGL ES中绘制正方形

来自分类Dev

在PHP表单中绘制正方形

来自分类Dev

openGL(c)绘制正方形

来自分类Dev

Windows窗体C#如何使图表的网格线为正方形?

来自分类Dev

在ImageView Android上绘制时,绘制的矩形不是正方形

来自分类Dev

在matplotlib中的正方形图区域上绘制对数线性图

来自分类Dev

如何在iOS上绘制正方形的二维矩阵?

来自分类Dev

获取正方形以在屏幕上移动

来自分类Dev

C#,Windows 应用程序,绘制一个边为 N 的正方形

来自分类Dev

我必须在C ++中在正方形内绘制正方形

来自分类Dev

如何使用SDL 2.0绘制正方形?

来自分类Dev

用轮廓绘制非正方形阵列

来自分类Dev

在Matlab中调整图像大小(绘制正方形/比例)

来自分类Dev

在OpenGL中用极坐标绘制正方形

来自分类Dev

Java程序使用for循环绘制正方形?

来自分类Dev

如何使用SDL 2.0绘制正方形?

来自分类Dev

在矩形内绘制n个正方形

来自分类Dev

在Opengl中从不同颜色的正方形绘制矩形