我将图片框的背景设置为图像,这很好。 我尝试在背景图像上绘制笔线,但线条不会出现在图像的顶部
这应该发生:(我更改了代码而不是线索我改变了什么来实现这一点,但这没有重置图片框)
图片框每2000ms更新一次,以显示标志信号,但不能在我的生活中得到线条。
以下是代码:
lblSelectedChar.Text = inputchar.ToString();
picSemaphore.BackgroundImage = semaphore.Properties.Resources.human;
leftHandDown();
rightHandLow();
leftHandDown()和rightHandLow()方法绘制线条,但我认为它们是在图像后面绘制的。我希望他们在前面画出来。知道怎么做吗?
private void leftHandDown()
{
lblLeftHand.Hide();
display.DrawLine(penLeftArm, centXCoord, centYCoord, LHDownXCoord, LHDownYCoord);
lblLeftHand.Top = LHDownYCoord + 74;
lblLeftHand.Left = LHDownXCoord + 13;
lblLeftHand.Show();
lblLeftHand.Update();
}
此外,当标签移动时,它会留下最后一个空白区域。知道如何阻止这种情况发生吗?
答案 0 :(得分:0)
正如LarsTech建议的那样,使用PictureBox的Paint()事件通过e.Graphics
值绘制带有提供的Graphics的行。您需要致电picSemaphore.Refresh();
以更新热线。
以下是一个简单的例子,为您提供基本想法:
public partial class Form1 : Form
{
private bool displayLeftArmLine = false;
private bool displayRightArmLine = false;
public Form1()
{
InitializeComponent();
picSemaphore.Paint += new PaintEventHandler(picSemaphore_Paint);
}
void picSemaphore_Paint(object sender, PaintEventArgs e)
{
if (displayLeftArmLine)
{
e.Graphics.DrawLine(penLeftArm, centXCoord, centYCoord, LHDownXCoord, LHDownYCoord);
}
if (displayRightArmLine)
{
e.Graphics.DrawLine(penRightArm, centXCoord, centYCoord, RHDownXCoord, RHDownYCoord);
}
}
private void leftHandDown()
{
lblLeftHand.Hide();
lblLeftHand.Top = LHDownYCoord + 74;
lblLeftHand.Left = LHDownXCoord + 13;
lblLeftHand.Show();
lblLeftHand.Update();
displayLeftArmLine = true;
picSemaphore.Refresh(); // force Paint() event for "picSemaphore" to fire
}
}