我正在尝试在我的表单上绘制一个图像,在一个图片框的顶部,该图片框上有一个用户选择的背景。根据我的研究,我认为使用这种方法是在图像的任何地方画出图像的最佳方法。我是新手使用这种方法,这就是我所拥有的:
private void button3_Click(object sender, PaintEventArgs e)
{
// Create image.
Image newImage = Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");
// Create coordinates for upper-left corner.
// of image and for size of image.
int x = 100;
int y = 100;
int width = 450;
int height = 150;
// Draw image to screen.
e.Graphics.DrawImage(newImage, x, y, width, height);
}
如果有人有一些建议,或者如果我使用这个错误,请随意发出声音,因为我只有一个学期的OOP。 (我们仍然在课堂上使用控制台应用程序; - ])
答案 0 :(得分:3)
正如Hans所说 - 你似乎有一个奇怪的陈述,你将click事件与paint事件混合在一起。
如果您将此方法连接到click事件:
button3.Click += button3_Click;
button3_Click的方法参数将是
private void button3_Click(object sender, EventArgs e) { // code here // }
我不清楚你究竟想做什么。 (即您是否尝试在图片框中绘制的图像上绘制此图像?x,y坐标为100,100是相对于图片框或其他控制对象的位置?)
同样,请尝试使用以下代码,与现在相比,它可以让您走上更好的轨道。
假设您正在使用上面描述的click事件,而不是paint事件,您的代码将如下所示:
我将向您展示两种方法 - 首先是'错误的方式',但这更接近您的上述方式。
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);
}
*重要提示* 无论上面的代码如何,您都应该在控件绘制事件处理程序中绘制,而不是在代码显示时显示控件click事件处理程序。每次重新控制控件时,您的更改都将丢失。
因此 - 这是'更好的方式':
如果您必须等待点击该按钮,您可以执行以下操作:
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);
}
答案 1 :(得分:0)
将处理程序添加到PictruBox.Paint事件并尝试绘制它。 您也可以直接将图像设置为PictureBox.Image属性,它会在图片框上绘制图像。
通过您的代码,plase提供完整的表单代码。我认为主要错误 - 您在窗体坐标系中绘制图片,因此可能是您从PictureBox中绘制图像。还有什么事情会影响你的方法?