调整窗体大小后,PictureBox消失

时间:2014-07-05 12:11:24

标签: c# winforms

我有 MainForms.cs 功能区,我想在功能区的右上角放置一个透明的 PictureBox (The PictureBox代表我的标志。)

This is my MainForm with a Logo on the top rigth

这就是我的尝试:

  • 我将 PictureBox 放在功能区的右上角
  • 我将 BackColor 设置为透明。
  • 我加载了PNG图像(包含透明度)
  • 我将图片的父级设置为功能区(就像PictureBox相对于Ribbon一样透明)

代码:

InitializeComponent();
pictureBox1.Parent = ribbon1;

直到这里一切都很好。

我的问题:

当我调整表单的大小时, PictureBox 会消失。

OnPaint 功能上,重置所有设置:

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

但没有任何东西可以让Picturebox出现。拜托,你能告诉我我错过了什么。

1 个答案:

答案 0 :(得分:2)

我下载了您正在使用的DLL并创建了一个小型测试示例。我注意到PictureBox的Parent属性设置为null。通过在OnPaint事件中将Parent添加回Picturebox,我可以在Form的大小增加时使其工作,但在Form size减少时会消失。当我在OnResize EventHandler中放入相同的代码时,它就像你期望的那样工作。

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);
        }
    }
}