1

我试图在我的表单上绘制一个图像,在一个图片框的顶部,该图片框有一个用户选择的背景。根据我的研究,我认为使用这种方法是在表单的任何位置绘制图像的最佳方法。我是使用这种方法的新手,这就是我所拥有的:

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。(我们仍在课堂上使用控制台应用程序;-])

4

2 回答 2

3

正如汉斯所说 - 你似乎有一个奇怪的说法,你将点击事件与绘画事件混为一谈。

如果您将此方法连接到点击事件:

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);

}
于 2012-05-24T04:14:29.007 回答
0

将处理程序添加到 PictruBox.Paint 事件并尝试在其中绘制。您也可以直接将图像设置为 PictureBox.Image 属性,它会在图片框上绘制图像。

通过您的代码,请提供完整的表单代码。我认为主要错误 - 你在表单坐标系中绘制图片,所以你可能会从 PictureBox 中绘制你的图像。还有什么事件可以处理您的方法?

于 2012-05-24T04:15:12.733 回答