Почему DrawRectangle рисует крест внутри моего PictureBox - PullRequest
2 голосов
/ 15 марта 2012

Я пытаюсь нарисовать 10 прямоугольников, но когда я использую g.DrawRectangle(), это рисует крест, как показано ниже:

Drawing cross

Я создаю объекты Vertex, которые содержат функцию getRectangle (), которая возвращает объект 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);

    }
}

Код для класса Graph

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 ]

2 голосов
/ 15 марта 2012

Красный Крест Указывает, что было сгенерировано исключение, вы его не видите, потому что оно обрабатывается. Сконфигурируйте Visual Studio для прерывания при выдаче исключения для его перехвата.

2 голосов
/ 15 марта 2012

Выглядит как исключение в цикле отрисовки

последний вызов:

newGraph.verteces[0,i]

завершается неудачно с OutOfRangeException вы должны повторять не i <= 10, а i < 10

1 голос
/ 15 марта 2012

Исключение было сгенерировано.Сначала посмотрите ваш код:

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

сгенерирует IndexOutOfRangeException, потому что verteces имеет 10 элементов, но будет циклически изменяться от 0 до 10 (включается, поэтому он будет искать 11 элементов).Это зависит от того, что вы хотите сделать, но вы должны изменить цикл на (удаление = из <=):

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

или увеличить размер verteces до 11.

...