5

我知道可以使用其 unicode 值将方形运算符添加到标签(如何在 .NET GUI 标签中显示上标字符?)。有没有办法为标签添加任何力量?我的应用程序需要显示多项式函数,即 x^7 + x^6 等。

4

4 回答 4

9

您可以使用(出色的)HtmlRenderer并构建您自己的支持 html 的标签控件。

这是一个例子:

public class HtmlPoweredLabel : Control
{
    protected override void OnPaint(PaintEventArgs e)
    {
        string html = string.Format(System.Globalization.CultureInfo.InvariantCulture,
        "<div style=\"font-family:{0}; font-size:{1}pt;\">{2}</div>",
        this.Font.FontFamily.Name,
        this.Font.SizeInPoints,
        this.Text);

        var topLeftCorner = new System.Drawing.PointF(0, 0);
        var size = this.Size;

        HtmlRenderer.HtmlRender.Render(e.Graphics, html, topLeftCorner, size);

        base.OnPaint(e);
    }
}

使用示例:

// add an HtmlPoweredLabel to you form using designer or programmatically,
// then set the text in this way:
this.htmlPoweredLabel.Text = "y = x<sup>7</sup> + x<sup>6</sup>";

结果 :

在此处输入图像描述

请注意,此代码将您的 html 包装到 div 部分中,该部分将字体系列和大小设置为控件使用的字体。所以你可以通过改变Font标签的属性来改变大小和字体。

于 2013-02-23T16:29:44.297 回答
4

您还可以使用本机支持的 ​​UTF 字符串的强大功能,并执行类似的扩展方法,将整数(甚至是 uint)转换为字符串,例如:

public static class SomeClass {

    private static readonly string superscripts = @"⁰¹²³⁴⁵⁶⁷⁸⁹";
    public static string ToSuperscriptNumber(this int @this) {

        var sb = new StringBuilder();
        Stack<byte> digits = new Stack<byte>();

        do {
            var digit = (byte)(@this % 10);
            digits.Push(digit);
            @this /= 10;
        } while (@this != 0);

        while (digits.Count > 0) {
            var digit = digits.Pop();
            sb.Append(superscripts[digit]);
        }
        return sb.ToString();
    }

}

然后以某种方式使用该扩展方法:

public class Etc {

   private Label someWinFormsLabel;

   public void Foo(int n, int m) {
     // we want to write the equation x + x^N + x^M = 0
     // where N and M are variables
     this.someWinFormsLabel.Text = string.Format(
       "x + x{0} + x{1} = 0",
       n.ToSuperscriptNumber(),
       m.ToSuperscriptNumber()
     );
   }

   // the result of calling Foo(34, 2798) would be the label becoming: x + x³⁴+ x²⁷⁹⁸ = 0

}

遵循这个想法,并进行一些额外的调整,(例如连接到文本框的 TextChange 和诸如此类的事件处理程序),您甚至可以允许用户编辑此类“上标兼容”字符串(通过在其他按钮上打开和关闭“上标模式”在您的用户界面上)。

于 2013-02-23T16:49:23.880 回答
0

您可以将 unicode 转换为上标、下标和任何其他符号的字符串并添加到字符串中。例如:如果你想要 10^6,你可以用 C# 或其他编写如下代码。

幂 6 的 unicode 为 U+2076,幂 7 的 unicode 为 U+2077,因此您可以将 x^6+x^7 写为

label1.Text = "X"+(char)0X2076+"X"+(char)0x2077;

于 2018-02-16T13:19:09.403 回答
0

我认为没有确切正确的方法来做到这一点。但是你可以做到这一点的一种方法是在这个网站https://lingojam.com/SuperscriptGenerator中输入你想成为指数的数字 。

然后复制转换后的版本。例如,我在其中放了一个 3,我得到的转换后的版本是 ³。然后,您只需将其连接在一起。

现在您可以将其添加到标签中...

mylabel.Text="m³";

或者无论如何你想。

于 2021-10-26T18:34:08.780 回答