Я хочу создать Picturebox, который адаптирует свою форму к строке определенного шрифта. Мне нужно это, чтобы впоследствии создавать тексты и размещать их над элементом управления AxWindowsMediaPlayer.Как получить точный шрифт из Fontfamily?
Поэтому я создал следующий класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace myProject
{
class ShapedPictureBoxes : PictureBox
{
public ShapedPictureBoxes()
{
this.Paint += this.shapedPaint;
}
void shapedPaint(object sender, PaintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath graphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
Font font = new Font("Arial", 14f);
float emSize = e.Graphics.DpiY*font.Size/72;
graphicsPath.AddString(text, new FontFamily("Arial"), (int)System.Drawing.FontStyle.Regular, emSize, new Point(0,0), new StringFormat());
e.Graphics.DrawString(text, font, Brushes.Red, new Point(0, 0));
this.Region = new Region(graphicsPath);
}
public string text = "Here comes the sun, doo da doo do";
}
}
Проблема теперь в том, что «Graphics.DrawString» не соответствует graphicspath.AddString, вероятно, потому, что FontFamily не то же самое, как шрифт. Как я могу их сопоставить?
So: Как я могу преобразовать Fontfamily в Font или наоборот?
Вот как это выглядит:
теперь выглядит лучше: я адаптировал вопрос с вашим частичным решением и добавил картинку ... – Salocin
@Salocin Я просто заметил, что ваш 'AddString()' использует Bold, но ваш шрифт не является. Я обновил свой пример, чтобы шрифт использовал Bold. Что происходит сейчас, если вы сделаете то же самое? –
О, это была ошибка, которая была только в вопросе .. скриншот от Fontstyle.Regular ... проблема остается прежней ... похоже, что эти два текста смещаются друг от друга, чем дольше текст .. – Salocin