Исправить фоновое сжатие C # winforms - PullRequest
0 голосов
/ 21 октября 2018

Я работаю на MDIParent с фоновым изображением после того, как перевожу ребенка из него, фоновое изображение раздавлено вот так enter image description here

как я могу решить эту проблему в C # winforms ??

1 Ответ

0 голосов
/ 24 октября 2018

Элемент управления 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...