הייתי צריך משהו יותר ממוקד מfontdialog המובנה של windows form
אולי למישהו אחר גם יהיה מזה תועלת
יש להוסיף class חדש לפרוייקט להעתיק לתוכו את הקוד כמות שהוא.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
public class CustomFontSelectionDialog : Form
{
private ListBox fontListBox;
private Label previewLabel;
private Button okButton;
private TextBox searchBox;
public Font SelectedFont { get; private set; }
public CustomFontSelectionDialog()
{
this.Text = "בחר גופן";
this.Size = new Size(450, 280);
this.RightToLeft = RightToLeft.Yes;
this.RightToLeftLayout = true;
searchBox = new TextBox();
searchBox.Location = new Point(10, 10);
searchBox.Size = new Size(200, 20);
searchBox.TextChanged += SearchBox_TextChanged;
this.Controls.Add(searchBox);
fontListBox = new ListBox();
fontListBox.Location = new Point(10, searchBox.Bottom + 10);
fontListBox.Size = new Size(200, 180);
fontListBox.SelectedIndexChanged += FontListBox_SelectedIndexChanged;
this.Controls.Add(fontListBox);
previewLabel = new Label();
previewLabel.Location = new Point(fontListBox.Right + 10, 10);
previewLabel.Size = new Size(180, this.ClientSize.Height - 2 * 20 - 40); // Adjusted for searchBox and margin
previewLabel.Font = new Font("Arial", 12);
previewLabel.Text = "תצוגה מקדימה"; // Sample Hebrew text for preview
previewLabel.BackColor = Color.White;
this.Controls.Add(previewLabel);
okButton = new Button();
okButton.Text = "אישור";
okButton.Location = new Point(previewLabel.Right - okButton.Width, this.ClientSize.Height - okButton.Height - 20);
okButton.Click += OkButton_Click;
this.Controls.Add(okButton);
// Populate the fontListBox with available fonts
foreach (FontFamily fontFamily in FontFamily.Families)
{
fontListBox.Items.Add(fontFamily.Name);
}
}
private void SearchBox_TextChanged(object sender, EventArgs e)
{
string searchText = searchBox.Text.ToLower(); // Convert search text to lowercase
fontListBox.Items.Clear();
// Filter and display fonts that match the search text (case-insensitive)
foreach (FontFamily fontFamily in FontFamily.Families)
{
if (fontFamily.Name.ToLower().Contains(searchText))
{
fontListBox.Items.Add(fontFamily.Name);
}
}
//fontListBox.SelectedIndex = 0;
}
private void FontListBox_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedFontName = fontListBox.SelectedItem as string;
if (selectedFontName != null)
{
SelectedFont = new Font(selectedFontName, 12); // Set a default size
previewLabel.Font = SelectedFont;
}
}
private void OkButton_Click(object sender, EventArgs e)
{
// The user has selected a font, you can use the SelectedFont property here.
DialogResult = DialogResult.OK;
this.Close();
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new CustomFontSelectionDialog());
}
}
וזה הקוד שלי לפתיחת הבוחר פונטים
שימו לב: אפשר להשתמש עם זה כדי להגדיר פונט בתוכנה שלכם על ידי שימוש ב resources >Settings שם תוכלו להגדיר משתנה שישמור את שם הפונט שהשתמשתם בו כמוצג בקוד דלהלן.
private void chooseFontForBooks_Click(object sender, EventArgs e)
{
using (CustomFontSelectionDialog fontDialog = new CustomFontSelectionDialog())
{
if (fontDialog.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.fontName = fontDialog.SelectedFont.Name;
Properties.Settings.Default.Save();
}
}
}