正如汉斯所说 - 你似乎有一个奇怪的说法,你将点击事件与绘画事件混为一谈。
如果您将此方法连接到点击事件:
button3.Click += button3_Click;
您对 button3_Click 的方法参数将是
private void button3_Click(object sender, EventArgs e) { // code here // }
我不清楚你实际上想要做什么。(即,您是否要在图片框中绘制的图像上绘制此图像?100、100 的 x,y 坐标是相对于图片框或其他控件对象的位置的吗?)
尽管如此,试试下面的代码,与现在相比,它会让你走上更好的轨道。
假设您使用的是我上面描述的单击事件,而不是绘制事件,您的代码将如下所示:
我将向您展示两种方法 - 首先是“错误的方法”,但这更接近您上面的方法。
private void button3_Click(object sender, EventArgs e)
{
// If this is only an exercise this is acceptable, otherwise you should
// store the image as a resource
Image newImage = Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");
Graphics graphics = controlToDrawOver.CreateGraphics();
// Note rectangle x,y coordinates are relative to
// the 'controlToDrawOver' object.
Rectangle rectangleAreaToDrawImage = new Rectangle(100, 100, 450, 150);
graphics.DrawImage(newImage, rectangleAreaToDrawImage);
}
* 重要说明 *
无论上面的代码如何,您都应该在控件绘制事件处理程序中进行绘制,而不是在您的代码显示的控件单击事件处理程序中进行绘制。每次重新绘制控件时,您的更改都会丢失。
因此 - 这是“更好的方法”:
如果您必须等待按钮被点击,您可以执行以下操作:
private void button3_Click(object sender, EventArgs e)
{
controlToDrawOver.Paint -= ControlPaintEventHandler;
controlToDrawOver.Paint += ControlPaintEventHandler;
}
private void ControlPaintEventHandler(object sender, PaintEventArgs e)
{
// If this is only an exercise this is acceptable, otherwise you should
// store the image as a resource
Image newImage = Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");
// Note rectangle x,y coordinates are relative to
// the 'controlToDrawOver' object.
Rectangle rectangleAreaToDrawImage = new Rectangle(100, 100, 450, 150);
e.Graphics.DrawImage(newImage, rectangleAreaToDrawImage);
}