winforms 如何生成表示要绘制的条形高度的随机元素数组

fdbelqdn  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(149)

我知道NET框架中数组和图形的基础知识(绘制图形,创建三角函数)。
我似乎无法想象如何随机生成数组元素,用条形高度(白色)表示,如下图所示:

我只试过下面的代码,每次生成一个数字时只得到一个数字。我期望的是0到100以随机顺序列出,但我做不到。

  1. Public Class FormSortingAlgorithm
  2. Dim rnd As New Random()
  3. Dim nums() As Integer
  4. Dim i As Integer
  5. Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
  6. Dim i As Integer
  7. ReDim nums(19)
  8. For i = 0 To 19
  9. nums(i) = rnd.Next(0, 100)
  10. Next
  11. End Sub
  12. Private Sub btnDisplayArray_Click(sender As Object, e As EventArgs) Handles btnDisplayArray.Click
  13. txtDisplay.Text = nums(j) & nums(i)
  14. End Sub
  15. End Class
2ledvvac

2ledvvac1#

注意:假定Windows窗体,给定问题中使用的名称

  • 这一行:txtDisplay.Text = nums(j) & nums(i)不会在TextBox中显示数组的内容,只是一个由数组中的两个元素组成的粘合数字。

如果在某处定义了j,并且它表示有效索引
您可以使用String.Join()构建一个字符串,该字符串包含使用分隔符的集合中的所有元素(此处为vbCrLf,因为您有TextBox)
我建议你用一个List(Of Integer)来替换数组,这是一个非常灵活的集合类型。你可以在需要的时候添加或删除元素。你可以调用它的.ToArray()方法,以防出于某种原因需要数组

要生成(0 : 100)范围内的值,必须指定[Random].Next(0, 101)
在本例中,我使用PictureBox绘制随机Integer值的集合。
图形表面的世界坐标被转换为笛卡尔平面的第一象限。
(0, 0)顶点是画布(PictureBox)的左下顶点,而不是左上顶点。
如果您不关心这个,请删除Matrix对象和Graphics.Transform = [Matrix]赋值
关于此处使用的矩阵,请参见Flip the GraphicsPath that draws the text中的注解

  1. Imports System.Collections.Generic
  2. Imports System.Drawing.Drawing2D
  3. Imports System.Linq
  4. Private Shared ReadOnly rnd As New Random()
  5. Private plotNumbers As List(Of Integer) = Nothing
  6. Private penWidth As Single = 1.0F
  7. Private numOfLines As Integer = 19
  8. Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
  9. ' Generate a new collection of random integers
  10. plotNumbers = GenerateNumbers(numOfLines)
  11. ' Show the generated values in a TextBox
  12. txtDisplay.Text = String.Join(vbCrLf, plotNumbers)
  13. ' Plot the lines in a PictureBox (named PlotSurface)
  14. PlotSurface.Invalidate()
  15. End Sub
  16. Private Sub PlotSurface_Paint(sender As Object, e As PaintEventArgs) Handles PlotSurface.Paint
  17. If plotNumbers Is Nothing OrElse plotNumbers.Count = 0 Then Return
  18. Dim canvas = DirectCast(sender, Control).ClientSize
  19. ' Scales the height of the lines to the Height of the Canvas. Remove if not needed
  20. Dim scaleFactor = canvas.Height / 100.0F
  21. Dim horzPosition As Single = 1.0F
  22. Dim line As Integer = 0
  23. Using pen As New Pen(Color.White, penWidth),
  24. toCartesianPlane = New Matrix(1, 0, 0, -1, 0, canvas.Height)
  25. e.Graphics.Transform = toCartesianPlane
  26. While horzPosition < canvas.Width
  27. e.Graphics.DrawLine(pen, horzPosition, 0, horzPosition, plotNumbers(line) * scaleFactor)
  28. horzPosition += penWidth
  29. line = (line + 1) Mod numOfLines
  30. End While
  31. End Using
  32. e.Graphics.ResetTransform()
  33. End Sub
  34. Private Function GenerateNumbers(numCount As Integer) As List(Of Integer)
  35. Return Enumerable.Range(0, numCount).Select(Function(n) rnd.Next(0, 101)).ToList()
  36. End Function

它是这样工作的:

展开查看全部
ej83mcc0

ej83mcc02#

---〈〈〉〉〈〈〈IMGTART'WRITE'〉〉〉AWM特殊调用fowler作为mobieba公共类表单排序算法Dim rnd作为新的随机数()尺寸编号()作为整数维i作为整数私有子集btnGenerate_Click(sender作为对象,e作为EventArgs)处理btnGenerate。单击Dim i作为整数重新调整数值(19)对于i = 0到19的数字(i)=第二次(0,100)下一个结束子私有子btnDisplayArray_Click(发送者作为对象,e作为事件参数)处理btnDisplayArray。单击txt显示。文本=数值(j)& nums(i)结束子类结束类点击机器人并运行DNS Vitett Customm Off.

相关问题