C# 调整窗体大小后,PictureBox将消失

C# 调整窗体大小后,PictureBox将消失,c#,winforms,C#,Winforms,我有一个MainForms.cs和功能区,我想在功能区的右上角放一个透明的图片盒(图片盒代表我的徽标) 这就是我尝试过的: 我把图片盒放在色带的右上角 我将背景色设置为透明 我加载PNG图像(包含透明) 我将图像的父对象设置为ribbon(这样,PictureBox相对于ribbon是透明的) 代码: InitializeComponent(); pictureBox1.Parent = ribbon1; 直到这里一切都很好 我的问题: 当我调整窗体的大小时,图片框将消失 在OnPain

我有一个MainForms.cs功能区,我想在功能区的右上角放一个透明的图片盒(图片盒代表我的徽标)

这就是我尝试过的:
  • 我把图片盒放在色带的右上角
  • 我将背景色设置为透明
  • 我加载PNG图像(包含透明)
  • 我将图像的父对象设置为ribbon(这样,PictureBox相对于ribbon是透明的)
代码:

InitializeComponent();
pictureBox1.Parent = ribbon1;
直到这里一切都很好

我的问题: 当我调整窗体的大小时,图片框将消失

OnPaint
功能上,我重置所有设置,如下所示:

protected override void OnPaint(PaintEventArgs pe)
{
    this.Activate();
    pictureBox1.Visible = true;
    pictureBox1.Show();
    pictureBox1.BringToFront();            
}

但是没有任何东西可以让Picturebox出现。请告诉我我错过了什么。我下载了您正在使用的DLL,并创建了一个小测试示例。我注意到PictureBox的父属性设置为null。通过在OnPaint事件中将父对象添加回Picturebox,我可以在表单大小增大时使其工作,但在表单大小减小时会消失。当我将相同的代码放入onresizeeventhandler时,它的工作方式与您预期的一样

public partial class Form1 : Form
{
    PictureBox pictureBox1 = new PictureBox();
    public Form1()
    {
        InitializeComponent();

        pictureBox1.Image = Image.FromFile(@"C:\temp\test.jpg");
        pictureBox1.Parent = ribbon1;
        pictureBox1.Location = new Point(this.Width-pictureBox1.Width,10);


    }


    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
        if (pictureBox1.Parent == null)
        {
            pictureBox1.Parent = ribbon1;
            pictureBox1.Visible = true;
            pictureBox1.Location = new Point(this.Width - pictureBox1.Width, 10);
        }
    }
}

如果这是Winforms,您如何获得功能区?或者它是一个菜单?我从这个链接中得到的功能区:我只需要编辑我的信息,我添加了一张我的主窗体的照片,上面有徽标,谢谢。不幸的是,我没有这方面的经验。你如何在你的彩带上设置你的图片框的位置太棒了!!这是OnResize功能的工作,非常感谢Mark