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

C# Winforms Eyeshot工具栏按钮及图标过小,如何增大尺寸?

Eyeshot Winforms 工具栏按钮放大实现方案

方案1:调整内置属性(无需重写逻辑,推荐优先使用)

  • 直接修改Eyeshot控件实例的工具栏按钮尺寸属性,示例代码:
// 此处design1为你的Eyeshot控件实例名称
// 设置按钮整体尺寸,单位为像素,可按需调整
design1.Toolbar.ButtonSize = new Size(48, 48);
// 设置图标缩放尺寸,建议比按钮尺寸小8~16px留内边距
design1.Toolbar.ImageScalingSize = new Size(36, 36);
  • 高DPI设备适配:在程序入口Program.cs的Main方法中添加如下代码,避免图标模糊:
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

方案2:重写工具栏绘制方法(自定义程度更高,适配特殊需求)

如果默认属性调整无法满足需求,可通过继承重写工具栏绘制逻辑实现自定义放大效果:

  1. 自定义工具栏类,继承Eyeshot原生Toolbar类,重写按钮绘制方法:
using DevDept.Eyeshot;
using System.Drawing;
using System.Drawing.Drawing2D;

public class LargeSizeToolbar : Toolbar
{
    public LargeSizeToolbar()
    {
        // 初始化默认放大参数,可外部修改
        ButtonSize = new Size(60, 60);
        ImageScalingSize = new Size(40, 40);
    }

    protected override void DrawButton(Graphics g, ToolbarButton button, int index, Rectangle buttonRect)
    {
        // 开启抗锯齿提升绘制质量
        g.SmoothingMode = SmoothingMode.AntiAlias;

        // 自定义按钮绘制区域,可按需调整放大比例
        Rectangle drawRect = new Rectangle(
            buttonRect.X,
            buttonRect.Y,
            (int)(buttonRect.Width * 1.1f),
            (int)(buttonRect.Height * 1.1f)
        );

        // 绘制按钮背景:保留原生状态逻辑(按下、悬停、禁用)
        Brush bgBrush;
        if (button.Enabled == false)
            bgBrush = Brushes.LightGray;
        else if (button.Pressed)
            bgBrush = Brushes.SkyBlue;
        else if (button.Hovered)
            bgBrush = Brushes.LightSkyBlue;
        else
            bgBrush = Brushes.Transparent;

        // 绘制圆角背景
        using (GraphicsPath path = GetRoundedRectPath(drawRect, 4))
        {
            g.FillPath(bgBrush, path);
        }

        // 绘制放大后的图标
        if (button.Image != null)
        {
            g.DrawImage(button.Image, 
                new Rectangle(
                    drawRect.X + (drawRect.Width - ImageScalingSize.Width) / 2,
                    drawRect.Y + 6,
                    ImageScalingSize.Width,
                    ImageScalingSize.Height
                )
            );
        }

        // 可选:绘制按钮文字
        if (!string.IsNullOrEmpty(button.Text))
        {
            g.DrawString(button.Text, Font, Brushes.Black,
                new PointF(
                    drawRect.X + (drawRect.Width - g.MeasureString(button.Text, Font).Width) / 2,
                    drawRect.Y + ImageScalingSize.Height + 8
                )
            );
        }
    }

    // 辅助方法:生成圆角矩形路径
    private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
    {
        GraphicsPath path = new GraphicsPath();
        path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
        path.AddArc(rect.Right - radius, rect.Y, radius, radius, 270, 90);
        path.AddArc(rect.Right - radius, rect.Bottom - radius, radius, radius, 0, 90);
        path.AddArc(rect.X, rect.Bottom - radius, radius, radius, 90, 90);
        path.CloseAllFigures();
        return path;
    }
}
  1. 替换Eyeshot默认工具栏,在窗体构造函数InitializeComponent()之后添加如下代码:
// 移除原生工具栏
design1.Controls.Remove(design1.Toolbar);
// 加载自定义工具栏
var customToolbar = new LargeSizeToolbar();
customToolbar.Design = design1;
customToolbar.Dock = DockStyle.Top;
design1.Controls.Add(customToolbar);
design1.Toolbar = customToolbar;
// 刷新工具栏
design1.Toolbar.UpdateButtons();

提示:如果不需要自定义背景、文字等样式,只需保留放大绘制区域的逻辑,其余可直接调用base.DrawButton(g, button, index, enlargedRect)复用原生绘制逻辑,代码更精简。


内容的提问来源于stack exchange,提问作者Daniel Lord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:57:03