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

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
    }

}
于 2013-07-02T19:07:46.953 に答える