Почему DrawRectangle рисует крест внутри моего PictureBox
Я пытаюсь нарисовать 10 прямоугольников, но когда я использую g.DrawRectangle()
он рисует крест, как показано ниже:
Я создаю объекты 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());
}
}
Код для класса Vertex
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 ответа
Выглядит как исключение в вашем цикле рисования
последний звонок:
newGraph.verteces[0,i]
не удается с OutOfRangeException
Вы должны повторить, чтобы не i <= 10
, но i < 10
Красный Крест Указывает, что было сгенерировано исключение, вы его не видите, потому что оно обрабатывается. Сконфигурируйте Visual Studio так, чтобы он прерывался на исключение и бросал его
Исключение было брошено. Сначала посмотрите ваш код:
for (int i = 0; i <= 10; i++)
будет генерировать IndexOutOfRangeException
так как verteces
имеет 10 элементов, но будет циклически изменяться от 0 до 10 (включается, поэтому он будет искать 11 элементов). Это зависит от того, что вы хотите сделать, но вы должны изменить цикл на (удаление =
от <=
):
for (int i = 0; i < 10; i++)
или увеличить размер verteces
до 11.