Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分数字体_C#_.net_Graphics_Fractions_Opentype - Fatal编程技术网

C# 分数字体

C# 分数字体,c#,.net,graphics,fractions,opentype,C#,.net,Graphics,Fractions,Opentype,我有一个函数,可以将十进制数转换为它的等价分数。我已经找到了一些分数,但我似乎找不到第十六(1/16)个分数。有人对我在网上的位置有什么建议吗,或者有没有办法把这三个字符的分数转换成一个字符的分数 我在下面有一个位图,它显示了第16个分数占据了如此多的不动产,不像其他看起来又漂亮又小的分数 我在下面添加了用于转换这些分数的函数 我在网上到处查过了,还没有解决这个问题 如果我能在这页的四分之三的地方找到类似的东西,你会看到数字类型。如果我能得到类似windows图形的堆叠版本,那将是一场胜利 st

我有一个函数,可以将十进制数转换为它的等价分数。我已经找到了一些分数,但我似乎找不到第十六(1/16)个分数。有人对我在网上的位置有什么建议吗,或者有没有办法把这三个字符的分数转换成一个字符的分数

我在下面有一个位图,它显示了第16个分数占据了如此多的不动产,不像其他看起来又漂亮又小的分数

我在下面添加了用于转换这些分数的函数

我在网上到处查过了,还没有解决这个问题

如果我能在这页的四分之三的地方找到类似的东西,你会看到数字类型。如果我能得到类似windows图形的堆叠版本,那将是一场胜利

static string getFractionFromDecimal(decimal dec)
    {
        string d = dec.ToString(), dd = string.Empty;
        switch (d)
        {
            case "0.0625": dd = " 1/16"; break;
            case "0.1250": dd = "⅛"; break;
            case "0.1875": dd = " 3/16"; break;
            case "0.2500": dd = "¼"; break;
            case "0.3125": dd = " 5/16"; break;
            case "0.3750": dd = "⅜"; break;
            case "0.4375": dd = " 7/16"; break;
            case "0.5000": dd = "½"; break;
            case "0.5625": dd = " 9/16"; break;
            case "0.6250": dd = "⅝"; break;
            case "0.6875": dd = " 11/16"; break;
            case "0.7500": dd = "¾"; break;
            case "0.8125": dd = " 13/16"; break;
            case "0.8750": dd = "⅞"; break;
            case "0.9375": dd = " 15/16"; break;
        }; return dd;
    }


我为你写了一个小班,可以帮你画一个分数。请注意,我已经硬编码了许多值,这是而不是良好实践。如果要使用这个概念,我建议您将代码中的乘法器参数化

public class FractionLabel : Control
{
    public int Numerator { get; set; }
    public int Denominator { get; set; }
    public Brush Brush { get; set; }

    protected override void OnPaint(PaintEventArgs e)
    {
        var graphics = e.Graphics;
        var font = Font;
        var n = Numerator.ToString();
        var d = Denominator.ToString();
        var numSize = graphics.MeasureString(n, font);
        graphics.DrawString(n, Font, Brush, new PointF());
        //Comment out the following line if you want sharp lines
        graphics.SmoothingMode = SmoothingMode.AntiAlias;
        using (var pen = new Pen(Brush))
        {
            var p1 = new PointF(numSize.Width/2, numSize.Height*5/4);
            var p2 = new PointF(numSize.Width*5/4, numSize.Height/2);
            graphics.DrawLine(pen, p1, p2);
        }
        var dPos = new PointF(numSize.Width*3/4, numSize.Height*3/4);
        graphics.DrawString(d, Font, Brush, dPos);
    }
}
示例用法:

var label = new FractionLabel
            {
                Numerator = 3,
                Denominator = 16,
                Font = new Font("Arial", 8),
                Brush = Brushes.Black,
                Width = 100,
                Height = 100
            };
Controls.Add(label);

如果您修改这个类并将其集成,您可以修改您的方法以返回
FractionLabel
,而不是
string

,如果您想使用默认字体,我认为这是不可能的。你会考虑另一种方法吗?您是使用
文本框中的字符串
,还是使用
标签
?我正在使用c#windows应用程序中的Graphics.DrawString将字符串写入位图。上面的图像是一个位图。@StorefrontDoors我在完成回答后已经阅读了您的评论。在这种情况下,您可以重用我编写的绘图代码。@StorefrontDoors不确定它是否完全适用于您(尤其是您现在有工作代码),但WPF 4和Silverlight 5可以以本机方式渲染分数。