.NET Framework中如何绘制随机数组的柱状图?
问题修复与白色柱状图实现方案
一、先解决数组显示问题
你的btnDisplayArray_Click方法存在未定义变量j,且未遍历数组拼接所有元素,导致只能显示单个值。修改后可完整显示数组所有元素:
Private Sub btnDisplayArray_Click(sender As Object, e As EventArgs) Handles btnDisplayArray.Click ' 用逗号分隔拼接数组所有元素 txtDisplay.Text = String.Join(", ", nums) End Sub
二、实现白色柱状图绘制功能
利用WinForms的Graphics类绘制白色柱状图,以下是完整修改后的代码:
Public Class FormSortingAlgorithm Dim rnd As New Random() Dim nums() As Integer ' 绘图参数定义 Private Const BarWidth As Integer = 20 ' 单根柱子宽度 Private Const Margin As Integer = 15 ' 图表边距 Private Const MaxBarHeight As Integer = 320 ' 数值100对应的柱子最大高度 Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click ReDim nums(19) ' 创建20个元素的数组 For i = 0 To nums.Length - 1 nums(i) = rnd.Next(0, 100) ' 生成0-99的随机整数 Next Me.Invalidate() ' 触发窗体重绘,刷新柱状图 End Sub Private Sub btnDisplayArray_Click(sender As Object, e As EventArgs) Handles btnDisplayArray.Click txtDisplay.Text = String.Join(", ", nums) End Sub ' 窗体Paint事件负责绘制柱状图 Private Sub FormSortingAlgorithm_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint If nums Is Nothing OrElse nums.Length = 0 Then Return Dim g As Graphics = e.Graphics g.Clear(Color.DimGray) ' 深色背景衬托白色柱子 For i = 0 To nums.Length - 1 ' 按比例计算柱子高度:数值100对应MaxBarHeight Dim barHeight As Integer = CInt(nums(i) / 100.0 * MaxBarHeight) ' 计算柱子位置:X轴留边距+间距,Y轴从底部向上计算 Dim xPos As Integer = Margin + (BarWidth + 6) * i Dim yPos As Integer = Me.ClientSize.Height - Margin - barHeight ' 绘制白色柱子 g.FillRectangle(Brushes.White, xPos, yPos, BarWidth, barHeight) ' 可选:在柱子上方标注对应数值 g.DrawString(nums(i).ToString(), Me.Font, Brushes.Black, xPos, yPos - 22) Next End Sub End Class
关键逻辑说明
- 数组生成:
ReDim nums(19)创建20元素数组,rnd.Next(0,100)生成指定范围的随机数。 - 数组显示:
String.Join方法快速拼接数组元素,避免手动遍历的冗余代码。 - 柱状图绘制:
- 通过数值比例转换,确保不同大小的随机数对应成比例的柱子高度。
- 计算柱子位置时加入间距和边距,避免图表拥挤或贴边。
- 调用
Invalidate()触发重绘,生成新数组后自动更新图表。
内容的提问来源于stack exchange,提问作者ganjaman1213
相关产品推荐
相关产品推荐

