EDIT: Это не дубликат «Как использовать событие OnPaint в C#», потому что я даже не знал, что он существует. Я задаю вопрос, когда не знаю ответа. Это как просить «Как проверить масло в моей машине», когда я даже не знаю, что такое палка для палки. Удалите знак дубликата, если он редактирует его таким образом, который объясняет, почему он не является дубликатом.Почему рисование на форме в его конструкторе не отображает ничего на форме?
Я пытаюсь создать случайный генератор рельефа. На данный момент я использую Windows Forms Graphics, чтобы нарисовать все. Я не могу заставить двигатель работать. Следующий код не отображает ничего в форме, хотя он должен нарисовать черный прямоугольник от 0,0 до 50,50. Может ли кто-нибудь решить?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Random_Terrain_Generator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Engine e = new Engine(100, 100);
e.Color3(Color.Blue);
e.rect(new Rectangle(0,0,50,50));
Graphics fg = this.CreateGraphics();
fg.DrawImage(e.getBuffer(), 1, 100, 100, 100);
}
}
public class Engine
{
Color fillColor;
Bitmap buffer;
Graphics bufferGraphics;
public Engine(int bufferWidth, int bufferHeight)
{
buffer = new Bitmap(bufferWidth, bufferHeight);
bufferGraphics = Graphics.FromImage(buffer);
}
public void fRect(Rectangle r)
{
bufferGraphics.FillRectangle(new SolidBrush(fillColor), r);
}
public void rect(Rectangle r)
{
bufferGraphics.DrawRectangle(new Pen(fillColor), r);
}
public void Color3(Color c)
{
fillColor = c;
}
public Bitmap getBuffer()
{
return buffer;
}
}
}
Вы сделали все в конструкторе формы. Как только форма рисуется, ваша коробка ушла. Формы постоянно перекрашиваются, когда кажется, что нужно визуально обновлять. Это означает, что вам нужно рисовать каждый раз, когда это происходит. http://stackoverflow.com/questions/10076116/how-to-use-the-onpaint-event-in-c – TyCobb
поможет ли это, если я поместил его в событие Form Load? Я делаю это после initializeConponent, поэтому я бы предположил, что он будет рисовать после формы. –
Нет, вам нужно переопределить метод OnPaint, поэтому, когда это будет сделано, вы можете нарисовать его. Посмотрите на пример, который я связал. – TyCobb