Элемент управления MDIClient - это объект, используемый в интерфейсе нескольких документов в качестве контейнера для всех дочерних форм.
Этот элемент управления имеет свойство BackGroundImage
.Вы можете установить объект Image, используя это свойство, вместо использования [MDIParent].BackGroundImage
.Это фактически решило бы проблему разрыва изображения.
Но вы не можете установить определенное свойство Layout.См. Документы о MDIClient
BackgroundImageLayout :
Это свойство не относится к этому классу.
Вы можете установить этосвойство, но оно игнорируется: вместо него используется значение по умолчанию ImageLayout.Tile
.
Можно установить другой макет, назначив объект Image для MDIParent
BackGroundImage
и указав BackGroundImageLayout
.Это изменит макет, но также вызовет эффект разрыва, о котором вы сообщаете.
Возможное решение - нарисовать объект Image на поверхности MDIClient
, используя его событие Paint()
какобычно.
Это решит эффект разрыва.Не мерцающий;это можно заметить, когда вы изменяете размер формы MDIParent
(ну, приложения MDI изменяются не так часто, возможно, они максимизируются и нормализуются).
Некоторое мерцание можно увидеть, когда фоновое изображение не покрыто дочерней формой.
Требуется небольшая корректировка спецификаций изображения: установка его разрешения DPI = MDIParent
заявленного DPI контекста устройства, в противном случае размер изображения не будет соответствовать размеру по умолчанию (это зависит от разрешения DPI).
См. Этот пост для описания:
Изображение не нарисовано в правильном месте .
Пример:
(Здесь я предполагаю, что фоновое изображение загружено из ресурсов проекта)
public partial class MDIParent : Form
{
private MdiClient mdiBackground = null;
private Bitmap BackGroundImage = null;
public MDIParent()
{
InitializeComponent();
//Specify an existing Resources' Image
BackGroundImage = new Bitmap(Properties.Resources.[Some Res Image] as Bitmap);
BackGroundImage.SetResolution(this.DeviceDpi, this.DeviceDpi);
}
private void Form1_Load(object sender, EventArgs e)
{
mdiBackground = this.Controls.OfType<MdiClient>().First();
mdiBackground.Paint += (s, evt) => {
evt.Graphics.DrawImage(BackGroundImage,
(mdiBackground.Width - BackGroundImage.Width) / 2.0F,
(mdiBackground.Height - BackGroundImage.Height) / 2.0F);
};
//Show some child Forms on start-up
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.mdiBackground != null) mdiBackground.Invalidate();
}
private void MDIParent_FormClosed(object sender, FormClosedEventArgs e)
{
if (BackGroundImage != null) BackGroundImage.Dispose();
}
}