C# 图形中PaintEventArgs.Graphics和Graphics.FromHwnd之间的差异 最新的
在C# 图形中PaintEventArgs.Graphics和Graphics.FromHwnd之间的差异 最新的,c#,winforms,draw,picturebox,C#,Winforms,Draw,Picturebox,在pictureBox1.Refresh()之后,它将触发pictureBox1\u Paint 以下代码将使图标保留在图片框上 private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (checkBox1.Checked) { e.Graphics.DrawIcon(IconCamera, rect); } } 下面的代码不是!它将绘制图标,并在用油漆绘制后不久将其清除(
pictureBox1.Refresh()之后代码>,它将触发pictureBox1\u Paint
以下代码将使图标保留在图片框上
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (checkBox1.Checked)
{
e.Graphics.DrawIcon(IconCamera, rect);
}
}
下面的代码不是!它将绘制图标,并在用油漆绘制后不久将其清除(这就是为什么我的老问题)
我以为这两个图形是一样的,但看起来好像不一样
我可以知道绘画事件参数的图形有什么不同吗
pictureBox1和pictureBox1手柄上的图形
李>
为什么在pictureBox1上使用图形绘制事件的DrawIcon
pictureBox1将在绘制事件中消失,但在函数I中不会消失
宣布?谢谢
老问题
选中复选框后,我将在图片框上绘制图标
Graphics graphic = Graphics.FromHwnd(pictureBox1.Handle);
if (checkBox1.CheckState.ToString() == "Checked")
{
Icon IconCamera = new Icon("cam.ico");
Rectangle rect = new Rectangle(100, 100, 32, 32);
graphic.DrawIcon(IconCamera, rect);
}
但是在图片框刷新之后
pictureBox1.Refresh();
绘制的图标将消失
我可以知道picturebox事件是什么吗?或者我可以使用它来输入绘图图标代码,以维护,或者总是自动重新绘制图标,即使在图片框刷新()之后也是如此?
谢谢。我尝试了Paint
和验证picturebox1无法工作。最好是依次使用两个调用:
pictureBox1.Invalidate();
pictureBox1.Update();
这将强制重新绘制picturebox
然后我订阅Paint
事件,当调用前两行代码时(在重新绘制picturebox的情况下)会发出信号。我在这里画所有的画
在您的情况下,可能是这样的:
public void Paint(PaintEventArgs e)
{
if (checkBox1.Checked)
{
Rectangle rect = new Rectangle(100, 100, 32, 32);
Icon IconCamera = new Icon("cam.ico");
e.Graphics.DrawIcon(IconCamera, rect);
}
}
然后,订阅checkBox1
的eventCheckedChanged
,并从本文开始调用这两个重画命令
这会导致,当用户更改选中状态的checkBox1
时,pictureBox1
将被强制重新绘制,图标将根据checkBox1
状态绘制。您可以避免使用图形对象,并找到另一种方法。我不知道您是否被迫使用图标,但您可以尝试以这种方式使用标签
label1.Image = "yourImage.bmp" // you can use a bitmap
你的陈述来了
if(checkBox1.Checked) {
label1.Visible = true;
label1.Location = new Point(x, y); // your coordinate
}
然后,您可以处理复选框1\u checked changed
和代码:
Void checkBox1_CheckedChanged(object sender, EventArgs e) {
if(!checkBox1.Checked) {
label1.Visible = false;
}
}
希望这能有所帮助。你是说刷新后?实际上,我需要将我的绘图图标放置到一个事件中,该事件将在刷新picturebox后始终触发。Thanks我的意思是在改变picturebox的代码末尾调用它。它将强制它重画。我应该把重画的代码放在哪里?我们重新绘制了picturebox事件?谢谢,它已经完成了。汉斯·帕桑:我不这么认为。Invalidate不会立即绘制,它只会将其添加到类似“待办事项列表”的内容中。来自MSDN:调用Invalidate方法不会强制同步绘制;要强制同步绘制,请在调用Invalidate方法后调用Update方法。如果在没有参数的情况下调用此方法,则整个客户端区域将添加到更新区域。我可以在一张图片中绘制多个图标,您的方法是加载某种背景图像来标记,而不是我的答案
if(checkBox1.Checked) {
label1.Visible = true;
label1.Location = new Point(x, y); // your coordinate
}
Void checkBox1_CheckedChanged(object sender, EventArgs e) {
if(!checkBox1.Checked) {
label1.Visible = false;
}
}