0

ポリゴンのリストをイメージボックスに描画しようとしています。これまでのところ、画面の左上隅に斜めの黒い線しか表示されていません。ポイントは以下の通りです。

20,20 0,20 20,0 40,40

200,100 0,20 20,0 20,20

100、200 0、200 200、0 250、450

150,130 1,20 20,0 10,20

    private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
    {
        int jobIndex = 0;
        int trussIndex = 0;

        Graphics g = e.Graphics;
        foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members)
        {
            Point[] pointArray = new Point[m.poly.Points.Count()];
            //m.poly.Points.CopyTo(pointArray, 0);
            int index =0;
            foreach(System.Windows.Point p in m.poly.Points)
            {
                pointArray[index].X = (int)p.X;
                pointArray[index].Y = (int)p.Y;
                index++;
            }
            Pen myPen = new Pen(Color.Black);
            SolidBrush myBrush = new SolidBrush(m.color);

            g.DrawPolygon(myPen, pointArray);
            g.FillPolygon(myBrush, pointArray);

        }
    }

ポリゴンがイメージボックスに表示されない理由について何かアイデアはありますか?色も箱の大きさも問題ありません

4

1 に答える 1

0

Paintイベントを使用してこのメ​​ソッドを呼び出しているようです。呼び出されたときに、データが利用可能であることを確認してください。paintイベントは常に呼び出されるわけではないため、描画するデータを追加する場合は、pictureBox1.Invalidate()メソッドを呼び出してpaintイベントを強制する必要があります。

これは遅かれ早かれ表示されると思いますが、画像(Bitmap)オブジェクトを作成し、PictureBoxのImageプロパティに割り当てる必要があります。次に、Graphics.FromImage(_image)を使用してグラフィックスオブジェクトを取得します。そうしないと、ウィンドウが覆われてからフォーカスが戻るか、画面からドラッグして元に戻すと、画像が残りません。

private Bitmap _bitMap;
private Graphics _graphic;
Pen myPen;

public Constructor()
{
    _bitMap = new Bitmap(pictureBox1.Width,pictureBox1.Height);
    _graphic = Graphics.FromImage(_bitMap);
    pictureBox1.Image = _bitMap;
    myPen = new Pen(Color.Black);
}
private void DataAdded()
{
    int jobIndex = 0;
    int trussIndex = 0;

    foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members)
    {
        //Pen myPen = new Pen(Color.Black); //Don't instantiate in a loop
        SolidBrush myBrush = new SolidBrush(m.color);
        _graphic.DrawPolygon(myPen, m.poly.Points.ToArray());
        _graphic.FillPolygon(myBrush, m.poly.Points.ToArray());
    }
    pictureBox1.Image = _bitMap; //Don't think you need this, but I don't remember
}

お役に立てれば

于 2012-05-24T00:28:13.360 に答える