我正在尝试创建一个控件,该控件允许用户选择字体系列,然后从该字体系列中选择字符。以下是我要实现的示例。
用字体系列列表填充组合框很容易:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF\System.Windows.Controls.Ribbon.dll
但是如何遍历并检索给定字体系列中的每个特定字符?
我将在“ DataGridViewButtonCell”上显示每个字符。
答案 0 :(得分:2)
DataGridViewButtonCell
的属性为Style.Font.FontFamily
。
这是使用DataGridViewButtonCell
的完整示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadDgv();
// detect each button font family
for (int i = 0; i < dataGridView1.RowCount-1; i++)
{
Debug.WriteLine(dataGridView1.Rows[i].Cells["button"].Style.Font.FontFamily.ToString());
}
}
private void LoadDgv()
{
dataGridView1.Columns.Add("btns", "BTNS");
FontFamilyCB.DisplayMember = "Name";
DataGridViewButtonColumn button = new DataGridViewButtonColumn();
{
button.Name = "button";
button.HeaderText = "Button";
button.Text = "Button";
dataGridView1.Columns.Add(button);
}
foreach (System.Drawing.FontFamily font in System.Drawing.FontFamily.Families)
{
FontFamilyCB.Items.Add(font);
DataGridViewButtonCell b = new DataGridViewButtonCell();
int rowIndex = dataGridView1.Rows.Add(b);
dataGridView1.Rows[rowIndex].Cells["button"].Style.Font = new Font(font, 11, FontStyle.Regular);
// each cell will have his own font-family
dataGridView1.Rows[rowIndex].Cells["button"].Value = "A";
}
}
}
答案 1 :(得分:2)
这是一个如何通过将int
强制转换为char
来显示字符的示例。如果我们在循环中进行此操作(并进行足够的迭代),则最终将显示所有字符。不幸的是,我认为有超过100,000个Unicode字符,这可能比您要显示的字符还要多(而且并非所有字符都会为每种字体显示内容)。
我将由您自己决定要显示的内容,但这是一个示例,该示例以按钮网格的形式打印出其中的前3750个(75 x 50)。 *请注意,您添加的控件越多,加载时间就越慢。
只需创建一个新的WinForms项目并将此代码放入Form_Load
事件中即可。您可以使用定义的变量来调整网格大小(从而调整加载时间):
private void Form1_Load(object sender, EventArgs e)
{
int gridWidth = 75;
int gridHeight = 50;
int controlSize = 20;
int row = 0;
for (int i = 1; i < gridWidth * gridHeight; i++)
{
var value = ((char) i).ToString();
Controls.Add(new Button
{
Left = i % gridWidth * controlSize,
Top = row * controlSize,
Width = controlSize,
Height = controlSize,
Text = value
});
if (i % gridWidth == 0) row++;
}
}
输出