5

我有一个图片框控件,单击它后,另一个图片框会出现在特定位置。Iow 它不是从工具箱中添加的。

PictureBox picOneFaceUpA = new PictureBox();
        picOneFaceUpA.Location = new Point(42, 202);
        picOneFaceUpA.Width = 90;
        picOneFaceUpA.Height = 120;
        picOneFaceUpA.Image = Image.FromFile("../../Resources/" + picFaceUpToBeMoved[0] + ".png");
        Controls.Add(picOneFaceUpA);
        picOneFaceUpA.BringToFront();

如何将 MouseClick 事件处理程序添加到此控件?

谢谢

4

4 回答 4

10

只需使用运算符添加事件处理程序+=

picOneFaceUpA.MouseClick += new MouseEventHandler(your_event_handler);

或者:

picOneFaceUpA.MouseClick += new MouseEventHandler((o, a) => code here);
于 2012-11-19T14:09:21.010 回答
1

在 WinForms 中订阅事件的最佳方式 - 在设计器中选择您的控件,转到“属性”窗口并选择“事件”选项卡。然后选择您想要的任何事件(单击、鼠标单击等)并双击事件名称右侧的空格。将生成事件处理程序并订阅事件。


如果要手动订阅事件,则将事件处理程序添加到事件

picOneFaceUpA.MouseClick += PicOneFaceUpA_MouseClick;

写完Tab后点击+=会生成处理程序。或者您可以手动编写它:

void PicOneFaceUpA_MouseClick(object sender, MouseEventArgs e)
{
   // handle click event
   if (e.Button == MouseButtons.Left)
       MessageBox.Show("Left button clicked");
}

顺便说一句,如果您不需要有关单击事件的其他信息(例如单击了哪个按钮),请改用Click事件。它默认处理左键单击:

picOneFaceUpA.Click += PicOneFaceUpA_Click;

和处理程序:

void PicOneFaceUpA_Click(object sender, EventArgs e)
{
   // show another picture box
}
于 2012-11-19T14:09:06.143 回答
1

如果您键入picOneFaceUpA.Click +=然后点击选项卡,它将为您自动完成并实现事件处理程序:

    private void button2_Click(object sender, EventArgs e)
    {
        PictureBox picOneFaceUpA= new PictureBox();
        picOneFaceUpA.Click += new EventHandler(picOneFaceUpA_Click);
    }

    void picOneFaceUpA_Click(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
于 2012-11-19T14:10:21.537 回答
1

看来您知道如何添加动态控件,那么您应该这样做

this.picOneFaceUpA.MouseClick += new MouseEventHandler(yourMethodName); //hook

并删除一个事件

this.picOneFaceUpA.MouseClick -= yourMethodName;     //unhook

该方法应声明如下:

private void yourMethodName(object sender, MouseEventArgs e)
{
    //your code here
}
于 2012-11-19T14:10:48.307 回答