C# FontButton字体更改不起作用
我正在使用以下代码从FontButton获取所选字体。但是字体名不会改变,即使我选择了不同的字体。。。不过尺寸合适C# FontButton字体更改不起作用,c#,xamarin,mono,gtk,C#,Xamarin,Mono,Gtk,我正在使用以下代码从FontButton获取所选字体。但是字体名不会改变,即使我选择了不同的字体。。。不过尺寸合适 protected void OnFontbutton2FontSet (object sender, EventArgs e) { try { string sfont = fontbutton2.FontName; string fontName = sfont.Substring(0,sfont.LastIndexOf('
protected void OnFontbutton2FontSet (object sender, EventArgs e)
{
try
{
string sfont = fontbutton2.FontName;
string fontName = sfont.Substring(0,sfont.LastIndexOf(' '));
int fontSize = int.Parse(sfont.Substring(sfont.LastIndexOf(' ')+1).Trim());// I know, looks a bit ugly
cfont = new Font(fontName ,fontSize, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
selectedfont=new Font(fontName ,fontSize, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
MessageDialog md = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, fontName);
int result = md.Run ();
MessageDialog md2 = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, selectedfont.Name);
int result2 = md2.Run ();
if (wwork.IsBusy == false) {
wwork.RunWorkerAsync ();
} else {
bgdirty = true;
}
}
catch(Exception ex) {
}
}
但是新创建的fontcfont
对象保持为默认字体,只有字体大小更改。。。字体名称不变
我做错了什么?请给我一些建议
更新:
设置后打印字体变量(Font)名称的控制台输出
System.Drawing.Font myfont = new Font ("Tahoma", 50, FontStyle.Regular, GraphicsUnit.Pixel);
不要尝试使用
sfont.Substring()
修改字体名称。许多字体的名称中都有空格
事实上,虽然您可以使用单个字体属性,但应该通过font-desc
属性获取PangoFontDescriptor并使用它。然后可以复制、修改该描述符,然后在绘图操作中使用它
你的东西看起来可疑。您不能从工作线程使用GTK+执行任何操作。如果要重新绘制小部件,请使用
gtk\u widget\u queue\u draw()
而不是string sfont=fontbutton2.FontName代码>使用字符串sfont=fontbutton2.Font.Name代码>
编辑1,按以下方式尝试:
FontFamily fontFamily = new FontFamily("Tahoma");
System.Drawing.Font cfont = new Font(
fontFamily,
10, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);
谢谢你的回答。。fontName正在返回正确的值。如果这是问题,则具有单个单词的字体应能正常工作。。我想是吧。即使fontName
返回正确的字符串,我也会从中创建一个新字体,如下所示:`cfont=new font(fontName,fontSize,FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);`cfont
的值保持不变。您确定fontName
没有返回类似于My Font Regular
或My Font 10
的内容吗?是的。。。我使用消息对话框
将其打印出来。此代码专门用于分隔fontname
和fontsize
intfontsize=int.Parse(sfont.Substring(sfont.LastIndexOf('')+1.Trim())代码>我已经更新了代码..请检查..新创建的字体对象cfont
具有新的大小..但是字体名称保持为旧的默认字体。我创建了一个简单的项目,通过一个按钮手动设置字体,并在控制台中打印出设置字体名称。。这是默认字体。我已经将整个项目附加在这里。你能检查一下你是否尝试过调试消息来显示在执行的每个阶段变量的设置吗?请把那些寄出去。另外,我同意关于避免线程的答案。@oldtecha谢谢你的帮助。。是 啊我已使用MessageDialog
检查了代码。请查看代码。即使我手动执行此操作,它也无法工作System.Drawing.Font cfont=新字体(“Tahoma”,“10”,FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel)代码>@oldtechaa我已删除线程。。添加了一个按钮并用于显示当前字体选择。。字体名称不变。我的意思是调试每个变量(包括sfont
等);最好是设置好后。对于终端输出,这应该是可能的,但如果您不能轻松做到这一点,则可以使用消息对话框。你能把结果贴出来吗?cfont
和selectedfont
之间有什么区别?@oldtechaa我创建了一个简单的项目,用一个按钮手动设置字体,并在控制台中打印出他设置的字体名称。。这是默认字体。我已将整个项目附在这里。您能检查一下吗。cfont
的类别是System.Drawing.font
,这个System.Drawing.font cfont=新字体(“Tahoma”,“10”,FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel)代码>不起作用。
FontFamily fontFamily = new FontFamily("Tahoma");
System.Drawing.Font cfont = new Font(
fontFamily,
10, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);