首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确设置MdiParent背景图像

正确设置MdiParent背景图像
EN

Stack Overflow用户
提问于 2013-10-22 22:14:54
回答 3查看 10.3K关注 0票数 2

我正在使用下面的代码来设置MdiParent窗体的背景图像,它工作得很好,但是当我单击最大化按钮时,BackgroundImage在右侧和底部边缘重复(即右侧和底部图像部分重复),我如何避免这种情况并正确显示图像?

代码语言:javascript
复制
public Parent()
{
    InitializeComponent();

    foreach (Control ctl in this.Controls)
    {
        if (ctl is MdiClient)
        {
            ctl.BackgroundImage = Properties.Resources.bg;
            ctl.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
            break;
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-22 22:18:08

代码语言:javascript
复制
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;

this指向Form。

我自己也注意到了你提到的同样的行为。这似乎只是一个绘画的问题。添加以下代码来修复它。

代码语言:javascript
复制
protected override void OnSizeChanged(EventArgs e)
{
    base.OnSizeChanged(e);
    this.Refresh();
}
票数 6
EN

Stack Overflow用户

发布于 2013-10-22 22:23:57

MdiClient.BackgroundImageLayout与类MdiClient无关(如MSDN文档页面所述)。您应该尝试一些变通方法。其中一个解决方法是paint BackgroundImage yourself

代码语言:javascript
复制
MdiClient client = Controls.OfType<MdiClient>().First();
client.Paint += (s, e) => {
   using(Image bg = Properties.Resources.bg){
     e.Graphics.DrawImage(bg, client.ClientRectangle);
   }
};
//Set this to repaint when the size is changed
typeof(Control).GetProperty("ResizeRedraw", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
              .SetValue(client, true, null);
//set this to prevent flicker
typeof(Control).GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
               .SetValue(client, true, null);
票数 3
EN

Stack Overflow用户

发布于 2018-10-10 03:18:53

代码语言:javascript
复制
Private Sub Frmmain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Try
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is MdiClient Then
                ctl.BackgroundImage = Me.BackgroundImage
            End If
        Next ctl
        Me.BackgroundImageLayout = ImageLayout.Zoom
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub



Private Sub Frmmain_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
    Try
        Me.Refresh()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19520373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档