0

我正在尝试在我的 winforms 项目中创建一个自定义弹出窗口,如下所示:

在此处输入图像描述

这样做的问题是边缘是光滑的......我正在实现这一点:

public partial class BubblePopup : ToolStripDropDown
{
    private const int BORDERWIDTH = 6;
    private SolidBrush _backgroundBrush;
    private int _borderRadius = 20;
    public BubblePopup()
    {
        this.BackColor = Color.Transparent;
        InitializeComponent();
        //Method 1
        Region = new Region(ControlUtilities.CreateBubblePath(new Rectangle(BORDERWIDTH - 1, BORDERWIDTH - 1, ClientSize.Width - (BORDERWIDTH * 2), ClientSize.Height - (BORDERWIDTH * 2)), _borderRadius));
        /////////////
        _backgroundBrush = new SolidBrush(Color.Blue);
    }

    //Method 1
    protected override void OnSizeChanged(EventArgs e)
    {
        Region = new Region(ControlUtilities.CreateBubblePath(new Rectangle(BORDERWIDTH - 1, BORDERWIDTH - 1, ClientSize.Width - (BORDERWIDTH * 2), ClientSize.Height - (BORDERWIDTH * 2)), _borderRadius));
        base.OnSizeChanged(e);
    }
    ////////

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | 0x20;
            return cp;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
    }
}

如果我不使用 Method1 注释所包含的代码,并且我将背景设置为透明并设置 CreateParams 标志以支持透明度,我会得到以下结果(我还尝试覆盖 OnPaintBackground 事件以及不调用 base. OnPaintBackground 我得到了黑色背景):

在此处输入图像描述

所以我要么需要一个带有平滑区域的自定义路径的弹出窗口,要么透明背景也适合我。

这也是我如何显示弹出窗口的代码:

private GeneralPopup _popupItem = new GeneralPopup();
        private ToolStripControlHost _popupControlHost;
        private BubblePopup _popup;
        public Form1()
        {
            InitializeComponent();
            _popupControlHost = new ToolStripControlHost(_popupItem);
            _popupControlHost.Padding = new Padding(0);
            _popupControlHost.Margin = new Padding(0);
            _popupControlHost.AutoSize = false;
            _popupControlHost.BackColor = Color.Transparent;

            _popup = new BubblePopup();
            _popup.Padding = new Padding(0);
            _popup.Margin = new Padding(0);
            _popup.AutoSize = true;
            _popup.DropShadowEnabled = false;
            _popup.Items.Add(_popupControlHost);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            _popup.Show(button1,10,10);
        }

提前致谢

4

0 回答 0