背景图像显示,但笔线不

时间:2013-07-02 18:31:33

标签: c# winforms picturebox

我将图片框的背景设置为图像,这很好。 我尝试在背景图像上绘制笔线,但线条不会出现在图像的顶部 enter image description here

这应该发生:(我更改了代码而不是线索我改变了什么来实现这一点,但这没有重置图片框) enter image description here

图片框每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();
}

此外,当标签移动时,它会留下最后一个空白区域。知道如何阻止这种情况发生吗?

1 个答案:

答案 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
    }

}