Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FontButton字体更改不起作用_C#_Xamarin_Mono_Gtk - Fatal编程技术网

C# 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('

我正在使用以下代码从FontButton获取所选字体。但是字体名不会改变,即使我选择了不同的字体。。。不过尺寸合适

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) {
    }
}
但是新创建的font
cfont
对象保持为默认字体,只有字体大小更改。。。字体名称不变

我做错了什么?请给我一些建议

更新: 设置后打印字体变量(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
int
fontsize=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);