如何解决这个调整大小的错误,让我的表单变得透明?

问题描述 投票:1回答:1

我有一段代码,一个没有边框的表单根据一个字符串改变它的大小。

这就像一个通知表格。

有时窗体不能正确地调整大小,它的一部分看起来是透明的。

我知道它是透明的,因为那个透明的部分会调用所有的事件,比如点击或鼠标滚轮,即使我在它的背景上看到的是程序。

下面是表单改变大小的代码,这是唯一一个改变颜色或大小的方法。

private void ChangeNotification(string Noti, Color C)
{
    string[] Lines = Noti.Split(new[] { '\r', '\n' });
    string Max = "";
    Lines.ToList().ForEach(s =>
    {
        if (s.Length > Max.Length)
            Max = s;
    });
    using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(new Bitmap(1, 1)))
    {
        SizeF size = graphics.MeasureString(Max, lblInfo.Font);
        Width = (int)size.Width + scroll.Width + 40;
        Height = Lines.Count() * (int)size.Height;
        Top = Screen.PrimaryScreen.WorkingArea.Height - Height;
        Left = Screen.PrimaryScreen.WorkingArea.Width - Width;
    }
    this.BackColor = C;
    lblInfo.Text = Noti;
}

我发送完全相同的文本,有些时候它正确地改变了它的大小。

例子失败。

Example Fails

例子OK:

Example OK

c# winforms resize transparent
1个回答
0
投票

只是让标签 自动尺寸 字符串的内容,然后根据这些内容调整表单的大小。 它也适用于多行字符串。 为什么要测量呢!...

public void ChangeNotification(string Noti, Color C)
{
    lblInfo.Text = Noti;
    this.BackColor = C;
    this.Size = new Size(lblInfo.Size.Width + lblInfo.Location.X * 2, lblInfo.Size.Height + lblInfo.Location.Y * 2);
    this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - Width, Screen.PrimaryScreen.WorkingArea.Height - Height);
}
© www.soinside.com 2019 - 2024. All rights reserved.