private void AddFont(ObsProperty property, ObsData setting, List<Control> controls) { string name = property.Name; Label label = new Label { Width = 300, Height = 60, AutoSize = false, BorderStyle = BorderStyle.Fixed3D, TextAlign = ContentAlignment.MiddleCenter }; Button button = new Button { Text = "Select..." }; using (ObsData fontData = new ObsData(setting.GetObject(name))) { string family = fontData.GetString("face"); //string style = fontData.GetString("style"); //not supported in Windows ObsFontFlags flags = (ObsFontFlags)fontData.GetInt("flags"); label.Font = new Font(family, 25F, (FontStyle)flags); ; label.Text = family; } button.Click += (sender, args) => { var fontDialog = new FontDialog(); using (ObsData fontData = new ObsData(setting.GetObject(name))) { float size = fontData.GetInt("size"); fontDialog.Font = new Font(label.Font.FontFamily, size, label.Font.Style); } if (fontDialog.ShowDialog() == DialogResult.OK) { var font = fontDialog.Font; using (ObsData fontData = new ObsData(setting.GetObject(name))) { fontData.SetString("face", font.Name.ToString()); fontData.SetString("style", ""); //not supported in Windows fontData.SetInt("size", (int)font.SizeInPoints); fontData.SetInt("flags", (int)font.Style); } view.PropertyChanged(property); font = new Font(font.Name, 25f, font.Style); label.Font = font; label.Text = font.Name; } }; controls.Add(label); controls.Add(button); }