为什么DrawRectangle在我的PictureBox中绘制一个十字

时间:2012-03-15 09:50:27

标签: c# graphics multidimensional-array drawrectangle

我正在尝试绘制10个矩形,但是当我使用g.DrawRectangle()时,它正在绘制一个十字形,如下所示:

Drawing cross

我正在创建包含getRectangle()函数的Vertex对象,该函数返回该顶点的Rectangle对象。

我希望创建这些对象并在pictureBox上将它们显示为矩形。

这是我的代码

    private System.Drawing.Graphics g;
    private System.Drawing.Pen pen1 = new System.Drawing.Pen(Color.Blue, 2F);

    public Form1()
    {
        InitializeComponent();

        pictureBox.Dock = DockStyle.Fill;
        pictureBox.BackColor = Color.White;
    }

    private void paintPictureBox(object sender, PaintEventArgs e)
    {
        // Draw the vertex on the screen
        g = e.Graphics;

        // Create new graph object
        Graph newGraph = new Graph();

        for (int i = 0; i <= 10; i++)
        {
           // Tried this code too, but it still shows the cross
           //g.DrawRectangle(pen1, Rectangle(10,10,10,10);

           g.DrawRectangle(pen1, newGraph.verteces[0,i].getRectangle());
        }
    }

顶点类的代码

class Vertex
{
    public int locationX;
    public int locationY;
    public int height = 10;
    public int width = 10;

    // Empty overload constructor
    public Vertex()
    {
    }

    // Constructor for Vertex
    public Vertex(int locX, int locY)
    {
        // Set the variables
        this.locationX = locX;
        this.locationY = locY;
    }

    public Rectangle getRectangle()
    {
        // Create a rectangle out of the vertex information
        return new Rectangle(locationX, locationY, width, height);

    }
}

图表类的代码

class Graph
{
    //verteces;
    public Vertex[,] verteces = new Vertex[10, 10];

    public Graph()
    {

        // Generate the graph, create the vertexs
        for (int i = 0; i <= 10; i++)
        {
            // Create 10 Vertexes with different coordinates
            verteces[0, i] = new Vertex(0, i);
        }
    }

}

3 个答案:

答案 0 :(得分:2)

在绘制循环中看起来像个异常

上次致电:

newGraph.verteces[0,i]

OutOfRangeException失败 你应该迭代到i <= 10,而不是i < 10

答案 1 :(得分:2)

红十字表示已抛出异常,您没有看到它,因为它正在被处理。 Configure Visual Studio to break on exception throw抓住它。

答案 2 :(得分:1)

抛出异常。首先看看你的代码:

for (int i = 0; i <= 10; i++)

将生成IndexOutOfRangeException,因为verteces有10个项目,但它会从0到10循环(包含所以它将搜索11个元素)。这取决于您想要做什么,但您必须将周期更改为(从=移除<=):

for (int i = 0; i < 10; i++)

或将verteces的大小增加到11。