c# - 如何在点击事件中绘制图像?

标签 c# graphics bitmap drawing

所以我只是尝试绘制图像和其他东西,但是我的代码似乎只在加载表单事件中起作用?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Interface_Editing_Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //This works perfectly
            /*Image i = Image.FromFile(@"C:\Users\Simon\Pictures\clickedbutton.jpg");
            Bitmap b = (Bitmap)panel1.BackgroundImage;

            using (Graphics g = Graphics.FromImage(b))
            {
                g.DrawImage(i, 0, 0, i.Size.Width, i.Size.Height);
            }*/
        }

        private void panel1_Click(object sender, EventArgs e)
        {
            //Doesnt draw anything, but will show the message box
            Image i = Image.FromFile(@"C:\Users\Simon\Pictures\clickedbutton.jpg");
            Bitmap b = (Bitmap)panel1.BackgroundImage;

            using (Graphics g = Graphics.FromImage(b))
            {
                //MessageBox.Show(" ");
                g.DrawImage(i, 0, 0, i.Size.Width, i.Size.Height);
            }
        }
    }
}

我知道这很可能是我忽略的一些简单的事情,但如果有人能给我一些关于正在发生的事情的见解,我将不胜感激。谢谢

最佳答案

Windows 不知道您更改了图像。 Image 类没有任何任何人都可以监听的事件,因此它知道图像已更改。它在 Load 事件中起作用,因为窗口还不可见,之后它将立即被绘制。这样你就可以看到改变后的图像。它在 Click 事件处理程序中不起作用,因为面板已经显示并且没有理由重新绘制自身。

只需让它知道需要重新绘制即可。将这行代码添加到方法的底部:

  panel1.Invalidate();

关于c# - 如何在点击事件中绘制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935826/

相关文章:

c# - 如何获取有关 IDispatch COM 接口(interface)故障的更多调试信息

c# - 属性网格项和 DoubleClick

c# - 如何编写将分隔字符串转换为列表的通用扩展方法?

java - 从 Glide 下载大图像时出现内存不足错误

c# - 取消 CancellationToken 是否会导致 CancellationToken 异常?

c# - 检查 3D 点是否位于给定的 3D 线上(两个 3D 点之间)

graphics - SSRS 图表 - 删除箭头

opengl - 加权、混合顺序独立透明度

c++ - winapi:从 HDC 到 HBITMAP

android - 位图上的水反射效果