gpt4 book ai didi

c# - 在图片框数组中写入文本

转载 作者:行者123 更新时间:2023-11-30 23:25:55 24 4
gpt4 key购买 nike

我尝试将 0 到 11 的文本放在 12 个有球形图像的图片框上,但得到的都是文本 11。

如何获取球上从 0 到 11 的文字?

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace wfballs2
{
public partial class Form1 : Form
{
String s;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
PictureBox[] Shapes = new PictureBox[12];
for (int i = 0; i < 12; i++)
{
s = Convert.ToString(i);
Shapes[i] = new PictureBox();
Shapes[i].Name = "ball" + i.ToString();
Shapes[i].Location = new Point(10 + 45 * i, 300);
Shapes[i].Size = new Size(40, 40);
Shapes[i].Image = Image.FromFile(@ "C:\Users\Eiko\Desktop\ball\ball.jpg");
Shapes[i].SizeMode = PictureBoxSizeMode.CenterImage;
Shapes[i].Visible = true;
this.Controls.Add(Shapes[i]);
Shapes[i].Paint += new PaintEventHandler((sender2, e2) =>
{
e2.Graphics.DrawString(s, Font, Brushes.Black, 10, 13);
});
}
}
}
}

最佳答案

变量 s 是表单中的一个实例,因此它的值由表单和您创建的所有形状共享。

每次绘制一个形状时,此代码:

 e2.Graphics.DrawString(s, Font, Brushes.Black, 10, 13);

将运行。 s 是您的表单的一个实例变量。它将为所有形状显示它设置的最后一个值。在您的情况下,发生在 for 循环的最后一次迭代中,因此是 11。

要解决此问题,您必须在匿名事件处理程序之前在局部变量中捕获循环变量,然后使用该局部变量在事件处理程序中执行 Convert.ToString(val),就像这样:

 var val = i; // capture variable
Shapes[i].Paint += new PaintEventHandler((sender2, e2) =>
{
// use captured variable here
e2.Graphics.DrawString(Convert.ToString(val), Font, Brushes.Black, 10, 13);
});

这将根据 val 生成带有局部变量的字符串。

关于c# - 在图片框数组中写入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076726/

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