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>";

結果 :

ここに画像の説明を入力してください

このコードは、フォントファミリーとサイズをコントロールで使用されるものに設定するdivセクションにhtmlをラップすることに注意してください。Fontしたがって、ラベルのプロパティを変更することで、サイズとフォントを変更できます。

于 2013-02-23T16:29:44.297 に答える
4

また、ネイティブにサポートされているUTF文字列の機能を使用して、int(またはuintsも)を次のような文字列に変換するextensionメソッドのようなことを行うこともできます。

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やwhatnotイベントハンドラーへのフックなど)を使用して、ユーザーがそのような「上付き文字互換」文字列を編集できるようにすることもできます(「上付き文字モード」を他のボタンからオンとオフに切り替えることで)ユーザーインターフェイス上)。

于 2013-02-23T16:49:23.880 に答える
0

上付き文字、下付き文字、およびその他の記号のユニコードを文字列に変換して、文字列に追加できます。例:10 ^ 6が必要な場合は、C#などで次のようにコードを記述できます。

電力6のユニコードはU+2076であり、電力7のユニコードはU + 2077であるため、x ^ 6 + x^7は次のように記述できます。

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

于 2018-02-16T13:19:09.403 に答える
0

これを行うための正確または適切な方法はないと思います。ただし、これを行う1つの方法は、指数になりたい桁をこのWebサイト https://lingojam.com/SuperscriptGeneratorに入力することです。

次に、変換されたバージョンをコピーします。たとえば、そこに3を入れて、変換したバージョンは³でした。次に、それを接続するだけです。

これで、ラベルに追加できます...

mylabel.Text="m³";

またはとにかくあなたがしたい。

于 2021-10-26T18:34:08.780 に答える