Когда я запускаю следующий код, изображение, загруженное в объект MyPictureBox, кратковременно мигает, но затем форма немедленно перезаписывается стандартным цветом фона Windows.
- Я получаю сообщения в правильном порядке.
- Я попытался удалить все базы. OnPaint (), но это не исправило.
- Я пробовал двойной буфер; не ожидал, что это что-то изменит, и это не произошло.
Я знаю, что упускаю что-то действительно очевидное. (P.S. форма не имеет никаких элементов управления, кроме MyPictureBox, который я добавляю.)
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Outlines {
public partial class Form1 : Form {
public MyPictureBox MPB;
public Form1() {
InitializeComponent();
MPB = new MyPictureBox("Benny.png");
this.Controls.Add(MPB);
}
private void Form1_Load(object sender, EventArgs e) {
Console.WriteLine("Form1:Load");
}
protected override void OnResizeEnd(EventArgs e) {
Console.WriteLine("Form1:ResizeEnd");
base.OnResizeEnd(e);
MPB.Size = new Size(this.ClientRectangle.Width, this.ClientRectangle.Height);
this.Invalidate(true);
}
protected override void OnClick(EventArgs e) {
Console.WriteLine("Form1:OnClick");
base.OnClick(e);
this.Invalidate(true);
}
protected override void OnPaint(PaintEventArgs e) {
Console.WriteLine("Form1:OnPaint");
base.OnPaint(e);
}
}
public class MyPictureBox : PictureBox {
private Bitmap _bitmap;
public MyPictureBox(string pathName) {
_bitmap = new Bitmap(pathName);
this.Size = new Size(500, 500);
this.Enabled = true;
this.Visible = true;
}
protected override void OnPaint(PaintEventArgs pe) {
Console.WriteLine("MPB:OnPaint");
base.OnPaint(pe);
var graphics = this.CreateGraphics();
graphics.Clear(Color.Gray);
if (_bitmap == null)
return;
graphics.DrawImage(_bitmap, new Point(0, 0));
graphics.Dispose();
}
protected override void OnResize(EventArgs e) {
Console.WriteLine("MPB:OnResize");
base.OnResize(e);
}
}
}