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

C#计算器如何在label控件中显示根号包裹数字的标准数学平方根样式

C# 计算器根号显示实现方案

这个需求完全可以实现,常用有两种实现路径,适配不同的精度要求:

方案1:快速实现(原生控件拼接,无需自定义开发)

直接用两个Label拼接即可,用第二个Label的上边框模拟根号的顶部横线,无需修改现有计算逻辑,仅需额外保存原始待开方数:

if (CW3.Checked) // 勾选平方根计算
{
    if (Z3N.Checked) // 勾选负数输入
    {
        MessageBox.Show("负数无法计算平方根。");
        return;
    }
    // 保存原始待开方数,不要直接覆盖原变量
    double originalNum = Zahl3;
    // 原有计算逻辑不变
    Zahl3 = Math.Sqrt(Zahl3);
    
    // 配置根号显示Label
    labelRadical.Font = new Font("微软雅黑", 24, FontStyle.Regular);
    labelRadical.Text = "√";
    labelRadical.Location = new Point(10, 10);
    labelRadical.AutoSize = true;
    
    // 配置待开方数显示Label
    labelRadicand.Font = new Font("微软雅黑", 12, FontStyle.Regular);
    labelRadicand.Text = originalNum.ToString();
    labelRadicand.AutoSize = true;
    // 调整位置让数字在根号下方
    labelRadicand.Location = new Point(labelRadical.Right - 3, labelRadical.Top + 12);
    // 绘制上边框模拟根号横线
    labelRadicand.Paint += (s, e) => {
        e.Graphics.DrawLine(Pens.Black, 0, 0, labelRadicand.Width, 0);
    };
    
    // 结果可以额外加Label显示: 等号 + Zahl3的结果
    labelResult.Text = $" = {Zahl3:0.##}";
    labelResult.Location = new Point(labelRadicand.Right + 5, labelRadicand.Top);
}

方案2:高还原度实现(自定义绘制控件,完全匹配数学书写规范)

如果需要适配任意长度的待开方数、显示效果和数学公式完全一致,可以重写Label的绘制逻辑,自定义绘制根号、待开方数和结果:

// 自定义平方根显示控件,编译后可直接拖到WinForm界面使用
public class SquareRootLabel : Label
{
    /// <summary>
    /// 待开方数字
    /// </summary>
    public double Radicand { get; set; }
    /// <summary>
    /// 平方根计算结果
    /// </summary>
    public double RootResult { get; set; }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g = e.Graphics;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        Brush textBrush = new SolidBrush(this.ForeColor);
        
        // 绘制根号符号
        Font radicalFont = new Font(this.Font.FontFamily, this.Font.Size * 1.8f, FontStyle.Regular);
        SizeF radicalSize = g.MeasureString("√", radicalFont);
        g.DrawString("√", radicalFont, textBrush, 0, 0);
        
        // 绘制根号下的待开方数
        string radicandStr = Radicand.ToString();
        SizeF radicandSize = g.MeasureString(radicandStr, this.Font);
        float radicandX = radicalSize.Width - 3;
        float radicandY = (radicalSize.Height - radicandSize.Height) / 2 + 2;
        g.DrawString(radicandStr, this.Font, textBrush, radicandX, radicandY);
        
        // 绘制根号顶部横线
        g.DrawLine(new Pen(textBrush, 1.5f), radicandX, radicandY - 1, radicandX + radicandSize.Width, radicandY - 1);
        
        // 绘制等号和计算结果
        string resultStr = $" = {RootResult:0.####}";
        g.DrawString(resultStr, this.Font, textBrush, radicandX + radicandSize.Width + 5, radicandY);
    }
}

// 调用方式
if (CW3.Checked)
{
    if (Z3N.Checked)
    {
        MessageBox.Show("负数无法计算平方根。");
        return;
    }
    squareRootLabel1.Radicand = Zahl3;
    Zahl3 = Math.Sqrt(Zahl3);
    squareRootLabel1.RootResult = Zahl3;
    squareRootLabel1.Refresh();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:04