【问题标题】:Fit text on a custom component在自定义组件上调整文本
【发布时间】:2017-11-23 17:56:50
【问题描述】:

我正在尝试创建一个“危险”类型的游戏,我已经到了您只需单击一个框就会出现一个问题框的地步。

我正在使用 customPictureBox,基本上覆盖了文本等:

  protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
        Size size = TextRenderer.MeasureText(text, font);
        int x = Width / 2 - size.Width / 2;
        int y = Height / 2 - size.Height / 2;
        pe.Graphics.DrawString(text, font, new SolidBrush(color), x, y);
    }

在游戏中我添加如下属性:

  CustomPictureBox box = new CustomPictureBox()
        {
            Text = ((QuestionBox)sender).Question.Text.ToUpper(),
            SizeMode = PictureBoxSizeMode.StretchImage,
            Font = new Font("Comic Sans MS", 40),
            Image = Properties.Resources.MainTile,
            ForeColor = Color.White,
            BorderStyle = BorderStyle.FixedSingle,
            Dock = DockStyle.Fill
        };

当文本长度超过一定数量(取决于监视器)单词时,问题就出现了,基本上会发生文本被绘制但大部分超出表单,添加 Autosize 和 Maximum size Reference,这会将 MaxSize 添加到整个 CustomPictureBox。

This solution 似乎为单词设置了偏移量,使较长的句子完全飞出屏幕。

理想情况下,我需要添加一个换行符,直到单词到达预设边界,这样它们就不会脱离表格。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    不要使用Graphics.DrawString,而是使用TextRenderer.DrawText
    具体来说,使用this overload,因为它接受
    IDeviceContext - 这是您的 Graphics 实例, 
    String - 这是要绘制的字符串,
    Font - 这是要使用的字体, 
    Rectangle - 这是用于边界的矩形, 
    Color - 这是要使用的前景色, 
    还有TextFormatFlags - 这是一个标志枚举,允许您指定如何换行 - 使用defaultWordBreak

    所以,替换这一行:

    pe.Graphics.DrawString(text, font, new SolidBrush(color), x, y);
    

    有了这个:

    var flags = TextFormatFlags.HorizontalCenter | 
                TextFormatFlags.VerticalCenter | 
                TextFormatFlags.WordBreak;
    TextRenderer.DrawText(pe.Graphics, text, font, pe.ClipRectangle, ForeColor, flags);
    

    【讨论】:

    • 确实有效,但有没有办法进行更多操作?因为在某一点上它似乎切断了文本的其余部分,尽管在那个时候是的,有这么长的问题并不常见..
    • 你可以从左上角开始而不是水平和垂直中心,你可以在文本不适合控件的地方添加省略号(...),或者你可以玩字体大小或控件大小。除此之外,我认为您无能为力。如果文本对于单元格而言太长,则无法像 Excel 那样在控件边界之外绘制文本。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多