关于C#动态控件的问题(可能是sender)

qq_39353189 2017-12-12 10:49:12

各位大佬,我最近在做作业的过程中遇到一个问题,就是在一个4X4的动态picturebox中,每个控件对应一个1-16的数字,开始的时候,点哎一个,所有的picturebox全部点开了,第二次我加了Picturebox b=(Picturebox)sender,

然后把pic[q,w]全部改成b,这次是每次点开 一个,但是每一个的数字都是相同的,

想各位大佬寻求解决方案。(我觉得是sender出了问题,但不知道是哪里的问题)

代码如下,谢谢各位了
各位大佬,我最近在做作业的过程中遇到一个问题,就是在一个4X4的动态picturebox中,每个控件对应一个1-16的数字,开始的时候,点哎一个,所有的picturebox全部点开了,第二次我加了Picturebox b=(Picturebox)sender,

然后把pic[q,w]全部改成b,这次是每次点开 一个,但是每一个的数字都是相同的,

想各位大佬寻求解决方案。(我觉得是sender出了问题,但不知道是哪里的问题)

代码如下,谢谢各位了
private void pic_Click(object sender, EventArgs e)
{
for (int q = 0; q < 4; q++)
{
for (int w = 0; w < 4; w++)
{
PictureBox b = (PictureBox)sender;
switch (nums [q,w])
{
case 1: b.Image = imageList1.Images[1]; break;
case 2: b.Image = imageList1.Images[2]; break;
case 3: b.Image = imageList1.Images[3]; break;
case 4: b.Image = imageList1.Images[4]; break;
case 5: b.Image = imageList1.Images[5]; break;
case 6: b.Image = imageList1.Images[6]; break;
case 7: b.Image = imageList1.Images[7]; break;
case 8: b.Image = imageList1.Images[8]; break;
case 9: b.Image = imageList1.Images[9]; break;
case 10: b.Image = imageList1.Images[10]; break;
case 11: b.Image = imageList1.Images[11]; break;
case 12: b.Image = imageList1.Images[12]; break;
case 13: b.Image = imageList1.Images[13]; break;
case 14: b.Image = imageList1.Images[14]; break;
case 15: b.Image = imageList1.Images[15]; break;
case 16: b.Image = imageList1.Images[16]; break;
}
}
}
}
...全文
252 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
raynors 2017-12-15
  • 打赏
  • 举报
回复
2楼说的对,对于动态控件数组来说,TAG是最好区分他们的 属性
xinbada1985 2017-12-15
  • 打赏
  • 举报
回复
还有一种做法也很简单,在生成16个PictureBox 时,只需要把控件ID设成P1到P16. private void pic_Click(object sender, EventArgs e) { PictureBox b = (PictureBox)sender; int index =int.Parse (b.id.replace("p","")); b.Image =imageList1.Images[index ]; } 3行代码解决战斗
xinbada1985 2017-12-15
  • 打赏
  • 举报
回复
2楼说的已经很明确了,其实imageList1.Images[1]; 这个list都可以不要,直接把对应的IMAGE绑定到TAG里面去就可以了 ,点击图片时直接 PictureBox b = (PictureBox)sender; b.Image = b.tag as Image; 就可以了。
MusVision 2017-12-12
  • 打赏
  • 举报
回复

    public partial class Form1 : Form
    {
        List<Image> _images = new List<Image>();
        public Form1()
        {
            InitializeComponent();
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Button btn = new Button();  //以button作为示例,自行更换为其他控件
                    btn.Height = 30;
                    btn.Width = 120;
                    btn.Location = new Point(j * 150, i * 100);
                    btn.Text = "[" + i + "," + j + "]";
                    btn.Name = (i * 4 + j).ToString();
                    btn.Click += OnBtnClick;
                    btn.BackColor = Color.CadetBlue;
                    this.Controls.Add(btn);
                    _images.Add(null);  //更换为你自己的图片集合
                }
            }
        }

        private void OnBtnClick(object sender, EventArgs e)
        {
            Button b = sender as Button;
            string n = b.Name;
            LoadPicture(n);
        }
        private Image LoadPicture(string n)
        {
            int picIndex = Convert.ToInt32(n);
            MessageBox.Show(n);       //测试
            return _images[picIndex]; //更换为你自己的图片集合
        }
    }
大然然 2017-12-12
  • 打赏
  • 举报
回复
猜测你可能是要这个效果: 自己改一下

Hobo丶 2017-12-12
  • 打赏
  • 举报
回复
引用 楼主 qq_39353189 的回复:
各位大佬,我最近在做作业的过程中遇到一个问题,就是在一个4X4的动态picturebox中,每个控件对应一个1-16的数字,开始的时候,点哎一个,所有的picturebox全部点开了,第二次我加了Picturebox b=(Picturebox)sender, 然后把pic[q,w]全部改成b,这次是每次点开 一个,但是每一个的数字都是相同的, 想各位大佬寻求解决方案。(我觉得是sender出了问题,但不知道是哪里的问题) 代码如下,谢谢各位了 各位大佬,我最近在做作业的过程中遇到一个问题,就是在一个4X4的动态picturebox中,每个控件对应一个1-16的数字,开始的时候,点哎一个,所有的picturebox全部点开了,第二次我加了Picturebox b=(Picturebox)sender, 然后把pic[q,w]全部改成b,这次是每次点开 一个,但是每一个的数字都是相同的, 想各位大佬寻求解决方案。(我觉得是sender出了问题,但不知道是哪里的问题) 代码如下,谢谢各位了 private void pic_Click(object sender, EventArgs e) { for (int q = 0; q < 4; q++) { for (int w = 0; w < 4; w++) { PictureBox b = (PictureBox)sender; switch (nums [q,w]) { case 1: b.Image = imageList1.Images[1]; break; case 2: b.Image = imageList1.Images[2]; break; case 3: b.Image = imageList1.Images[3]; break; case 4: b.Image = imageList1.Images[4]; break; case 5: b.Image = imageList1.Images[5]; break; case 6: b.Image = imageList1.Images[6]; break; case 7: b.Image = imageList1.Images[7]; break; case 8: b.Image = imageList1.Images[8]; break; case 9: b.Image = imageList1.Images[9]; break; case 10: b.Image = imageList1.Images[10]; break; case 11: b.Image = imageList1.Images[11]; break; case 12: b.Image = imageList1.Images[12]; break; case 13: b.Image = imageList1.Images[13]; break; case 14: b.Image = imageList1.Images[14]; break; case 15: b.Image = imageList1.Images[15]; break; case 16: b.Image = imageList1.Images[16]; break; } } } }
PictureBox b = (PictureBox)sender; 你这代码就已经知道是点击的那个动态控件,其实没必要两个for循环 用一个list就够 也简洁很多 再者代码就这些 我觉得是你其他地方有问你

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧