1

我将图片框的背景设置为图像,这很好。我尝试在背景图像上画笔线,但这些线没有出现在图像顶部 在此处输入图像描述

这应该会发生:(我更改了代码,但不知道我更改了什么来实现这一点,但这是没有重置图片框) 在此处输入图像描述

图片框每 2000 毫秒更新一次以显示标志信号,但我一生都无法让线条出现。

以下是一些代码:

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();
}

此外,当标签被移动时,它会在上次所在的位置留下一个空白区域。知道如何阻止这种情况发生吗?

4

1 回答 1

0

e.Graphics正如 LarsTech 建议的那样,使用 PictureBox 的 Paint() 事件通过值使用提供的 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
    }

}
于 2013-07-02T19:07:46.953 回答