如何在单击事件中绘制图像
本文关键字:绘制 图像 事件 单击 | 更新日期: 2023-09-27 18:16:54
所以我只是尝试绘制图像和其他东西,但似乎我的代码只适用于加载表单事件?
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();
这似乎是一个与处理面板内的点击事件有关的问题,因为它内部有不同的控件。
确保您的应用程序处理panel1_click事件。(可能通过调试器你会知道它)。
应用程序可能由于不同的原因而无法处理此事件,例如面板上存在不同的控件等。
你可以参考下面的问题和你有同样的问题:
面板事件不能在c#中工作
在c#中处理面板内任意位置的点击事件
这个工作示例可能会指导您:
private Bitmap _bmp = new Bitmap(250, 250);
public Form1()
{
InitializeComponent();
panel1.Click += new MouseEventHandler(panel1_Click);
panel1.Paint += new PaintEventHandler(panel1_Paint);
using (Graphics g = Graphics.FromImage(_bmp))
g.Clear(SystemColors.Window);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(_bmp, new Point(0, 0));
}
private void panel1_Click(object sender, MouseEventArgs e)
{
using (Graphics g = Graphics.FromImage(_bmp))
{
g.DrawString("Mouse Clicked Here!", panel1.Font, Brushes.Black, e.Location);
}
panel1.Invalidate();
}