You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForms中实现带圆角的DevExpress Flyout ToolTip(含UserControl)

解决DevExpress Flyout ToolTip使用UserControl时的圆角边框问题

当你使用UserControl作为DevExpress Flyout ToolTip的自定义内容时,仅设置ToolTipController的Rounded属性或给UserControl设置圆角区域,只会让内部控件变成圆角,但外层ToolTip容器的方形边框依然存在。以下是两种可行的解决方法:

方法一:自定义绘制外层ToolTip容器的圆角

通过ToolTipController的CustomDraw事件,手动修改外层FlyoutForm的区域为圆角,让整个ToolTip容器呈现圆角效果:

  1. 订阅CustomDraw事件:
this.toolTipController1.CustomDraw += ToolTipController1_CustomDraw;
  1. 实现事件处理逻辑:
private void ToolTipController1_CustomDraw(object sender, ToolTipControllerCustomDrawEventArgs e)
{
    if (e.Info.FlyoutControl != null)
    {
        var flyoutForm = e.ToolTipControl as DevExpress.Utils.Flyouts.FlyoutForm;
        if (flyoutForm != null)
        {
            int roundRadius = 15; // 与你期望的圆角半径保持一致
            var bounds = flyoutForm.ClientRectangle;
            flyoutForm.Region = Region.FromHrgn(CreateRoundRectRgn(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom, roundRadius, roundRadius));
        }
    }
}

// 复用你已定义的GDI函数
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern IntPtr CreateRoundRectRgn(int nLeftRect, int nTopRect,
    int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse);

方法二:调整UserControl布局隐藏外层边框

利用负Padding让UserControl的圆角区域覆盖外层ToolTip的方形边框,同时匹配背景色消除间隙:

在你的UCTest用户控件构造函数中添加以下代码:

public UCTest()
{
    InitializeComponent();
    // 设置负Padding让控件向外延伸,覆盖外层方形边框
    this.Padding = new Padding(-2);
    // 匹配ToolTip的默认背景色,避免出现缝隙
    this.BackColor = DevExpress.LookAndFeel.UserLookAndFeel.Default.Skin.Colors.GetColor("ToolTipBackgroundColor");
}

注意事项

  • 确保ToolTipController的ShowShadow属性设置为false,否则阴影会保留方形轮廓,破坏圆角视觉效果;
  • 两种方法可以结合使用,先通过CustomDraw修改外层容器圆角,再调整UserControl的Padding和背景色,确保没有视觉间隙。

内容的提问来源于stack exchange,提问作者Tomasz Filipek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:42