我正在使用以下代码从FontButton获取所选字体。但是即使我选择了不同的字体,fontName也不会改变......虽然大小有效。
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) {
}
}
但新创建的字体cfont
对象保留为默认字体,只有字体大小更改...字体名称不会更改。
我做错了什么?请指教。
更新: 带字体变量的控制台输出(字体)名称设置
后打印System.Drawing.Font myfont = new Font ("Tahoma", 50, FontStyle.Regular, GraphicsUnit.Pixel);
Loaded assembly: /Users/me/Desktop/testproject/fonttest/fonttest/bin/Debug/fonttest.exe
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/gtk-sharp/2.12.0.0__35e10195dab3c99f/gtk-sharp.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/glib-sharp/2.12.0.0__35e10195dab3c99f/glib-sharp.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/atk-sharp/2.12.0.0__35e10195dab3c99f/atk-sharp.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/gdk-sharp/2.12.0.0__35e10195dab3c99f/gdk-sharp.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll [External]
Loaded assembly: /Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll [External]
Fontconfig error: Cannot load default config file
Lucida Grande
答案 0 :(得分:2)
请勿尝试使用sfont.Substring()
修改字体名称。许多字体的名称都有空格。
事实上,虽然您可以使用单独的字体属性,但您应该通过font-desc
属性获取PangoFontDescriptor并使用它。然后,您可以复制该描述符,对其进行修改,然后在绘图操作中使用它。
您的线程内容看起来很可疑。你不能在工作线程中对GTK +做任何事情。如果要重新绘制窗口小部件,请使用gtk_widget_queue_draw()
或其中一个相关功能。
答案 1 :(得分:0)
使用Font
命名空间中的System.Drawing
类
而不是string sfont = fontbutton2.FontName;
使用string sfont = fontbutton2.Font.Name;
编辑1,试试这种方式:
FontFamily fontFamily = new FontFamily("Tahoma");
System.Drawing.Font cfont = new Font(
fontFamily,
10, FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel);