//combination of pictureBox1.Invalidate(); and pictureBox1.Update();
pictureBox1.Refresh();
在pictureBox1.Refresh();
之后,它会触发pictureBox1_Paint
以下代码将在图片框中保留图标。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (checkBox1.Checked)
{
e.Graphics.DrawIcon(IconCamera, rect);
}
}
以下代码不是!它将在Paint中绘制后立即绘制图标并清除(这就是为什么有我的旧问题)
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics graphic = Graphics.FromHwnd(pictureBox1.Handle);
if (checkBox1.Checked)
{
graphic.DrawIcon(IconCamera, rect);
}
}
我认为这两个图形是相同的,但看起来它们不一样。
Graphics
有什么不同
来自pictureBox1的pictureBox1和Graphics
? DrawIcon
来自句柄的Graphics
的事件
pictureBox1将在Paint事件中消失,但在函数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();
绘制的图标将消失。
我可以知道什么是图片框事件或者我可以使用绘图图标代码来维护或始终自动重绘即使在图片框refresh()?
谢谢之后,图标也是如此。我尝试了Paint
并且{box} 1的Validating
无效。
答案 0 :(得分:2)
最好是一个接一个地使用两个电话:
pictureBox1.Invalidate();
pictureBox1.Update();
这将强制重绘图片框。
然后我订阅Paint
事件,当前两行代码被调用时(在重绘图片框的情况下)会发出信号。在这里,我做了所有的图纸。
在你的情况下,它会是这样的:
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);
}
}
然后,订阅CheckedChanged
的事件checkBox1
,并从那里开始调用两个重绘命令。
这会导致,当用户更改checkBox1
的选中状态时,将强制重绘pictureBox1
,并根据checkBox1
状态绘制图标。
答案 1 :(得分:0)
您可以避免使用Graphics
对象并找到其他方法。我不知道您是否被迫使用图标,但您可以尝试以这种方式使用Label
。
label1.Image = "yourImage.bmp" // you can use a bitmap
这里有你的陈述。
if(checkBox1.Checked) {
label1.Visible = true;
label1.Location = new Point(x, y); // your coordinate
}
然后你可以处理checkBox1_CheckedChanged
和代码:
Void checkBox1_CheckedChanged(object sender, EventArgs e) {
if(!checkBox1.Checked) {
label1.Visible = false;
}
}
希望这可以提供帮助。