我正在尝试在我的 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);
}
提前致谢