【问题标题】:How can I add events to a PictureBox dynamically created by clicking button? (C#)如何将事件添加到通过单击按钮动态创建的 PictureBox? (C#)
【发布时间】:2015-04-13 16:50:29
【问题描述】:

我通过单击表单中的按钮来动态创建一堆图片框,但我不清楚如何为每个图片框添加一个事件。这是我的想法

private void insertarBloqueToolStripMenuItem_Click(object sender, EventArgs e)
{
    pbA = new PictureBox{
        Name = "picturebox" + contB,
        Image = new Bitmap(bloque),
        Size = pbA.Image.Size,
    };
    pbA.MouseDown += new MouseEventHandler(pbA_MouseDown);
    pbA.MouseUp += new MouseEventHandler(pbA_MouseUp);
    pbA.MouseMove += new MouseEventHandler(pbA_MouseMove);
    pbA.Paint += new PaintEventHandler(pbA_Paint);
    pbA.Cursor = Cursors.Hand;
    listaBloques.Add(pbA);
    panel1.Controls.Add(pbA);
}

这就是我得到的,你能帮我这个想法吗?以及如何创建一个方法来移动列表中的一个 PictureBox?谢谢

【问题讨论】:

    标签: c# winforms drawing


    【解决方案1】:

    你的想法很不错! 但写就够了(但你的作品也很好):

    pbA.Paint += pbA_Paint;// generally: ... += methodName;
    

    而且您必须自己创建事件。例如:

    void pbA_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        //do some cool stuff!
    }
    

    如果它被绘制在 任何 个 PictureBoxes 上,则将调用此方法。如果你想知道哪个 PictureBox 被画了,那么只需写:

    void pbA_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        PictureBox picBox_active = sender as PictureBox;
        //do some cool stuff!
    }
    

    如果要使用一种方法来移动一个 PictureBox,您可以将所需的对象作为参数:

    void move(PictureBox picBox, int moveX, int moveY)
    {
        picBox.Location = new Point(moveX, moveY);
    }
    

    您可以通过以下方式调用此方法:

    PictureBox picBoxTest = new PictureBox();
    move(picBoxTest, 5, 5);
    

    为了更清楚地举个例子:

    void pbA_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        PictureBox picBox_active = sender as PictureBox;
        move(picBox_active, 5, 5);
    }
    

    已经绘制好的PictureBox会移动到坐标5,5。

    【讨论】:

    • 这适用于我在解码中提到的每一种方法?啊,我忘了把“ContB++”行放在那里。
    • 另外,我已经有了“拖放”事件(我忘了提,它不是“移动”方法,而是“拖放”方法)
    • 是的,您必须为每个事件执行相同的过程,但不是每个对象。每次使用此代码创建新的 PictureBox 时,您都会告诉新对象调用与事件相关的方法。每次都会发生这种情况。所以每个对象都会调用相同的方法。方法本身 (pba_Paint()) 只需编写一次。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2017-11-08
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多