Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75

Заполнить ComboBox шрифтами установленными в системе

21.05.2015, 14:35. Показов 4440. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как заполнить ComboBox системными шрифтами для последующего редактирования в richTextBox?

Добавлено через 15 минут
Нашел только для WPF
C#
1
foreach (FontFamily F in Fonts.SystemFontFamilies) addToComboBox(F);
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2015, 14:35
Ответы с готовыми решениями:

Заполнение ComboBox системными шрифтами
Доброго времени суток! Возникла проблема, связанная с надобностью заполнять комбобокс системными шрифтами. А после выбора нужного...

ComboBox.DataSource и DataView: как заполнить ComboBox
Добрый вечер! Прочитал в книге, что "В результирующем DataView, будут видимы все столбцы исходный таблицы". То есть предположим если...

Как заполнить Items ComboBox'a из Items другого ComboBox'a
Есть комбобокс на главной форме и комбобокс на Form2. Необходимо заполнить айтемс комбобокса на Form2 из айтемс комбобокса на первой форме....

5
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
21.05.2015, 14:44
Лучший ответ Сообщение было отмечено Shoorup_SCBist как решение

Решение

C#
1
comboBox1.Items.AddRange(FontFamily.Families.Select(f=>f.Name).ToArray());
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.05.2015, 15:06
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
 
        var fonts = new InstalledFontCollection();
        var fontBox = new ComboBox
        {
            Name = "fontBox",
            Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
            Left = this.Padding.Left,
            Top = this.Padding.Top,
            Width = this.Width - this.Padding.Left - this.Padding.Right - 15,
            Height = this.Height - this.Padding.Top - this.Padding.Right,
            DrawMode = DrawMode.OwnerDrawVariable,
            DataSource = fonts.Families.Select(FromFamily).ToArray(),
            DisplayMember = "Name",
        };
        fontBox.DrawItem += OnDrawItem;
        fontBox.MeasureItem += OnMeasureItem;
        fontBox.SelectedIndexChanged += OnSelectedIndexChanged;
 
        this.Controls.Add(fontBox);
    }
 
    private Font FromFamily(FontFamily family)
    {
        var styles = Enum.GetValues(typeof(FontStyle)) as FontStyle[];
        var style = styles.First(family.IsStyleAvailable);
 
        return new Font(family, 12, style);
    }
 
    private void OnDrawItem(object sender, DrawItemEventArgs e)
    {
        var cb = sender as ComboBox;
        var fonts = cb.DataSource as Font[];
        var font = fonts[e.Index];
 
        e.DrawBackground();
        e.Graphics.DrawString(FormatFontName(font), font, Brushes.Black, e.Bounds);
        e.DrawFocusRectangle();
    }
 
    private void OnMeasureItem(object sender, MeasureItemEventArgs e)
    {
        var cb = sender as ComboBox;
        var fonts = cb.DataSource as Font[];
        var selectedFont = fonts[e.Index];
 
        var size = e.Graphics.MeasureString(FormatFontName(selectedFont), selectedFont);
        e.ItemHeight = (int)Math.Ceiling(size.Height);
        e.ItemWidth = (int)Math.Ceiling(size.Width);
    }
 
    private void OnSelectedIndexChanged(object sender, EventArgs e)
    {
        var cb = sender as ComboBox;
        var fonts = cb.DataSource as Font[];
        cb.Font = fonts[cb.SelectedIndex];
    }
 
    string FormatFontName(Font font)
    {
        return font.Name;
    }
}
Можно отнаследовать свой класс FontComboBox от ComboBox'a, чтобы реализацию не держать в классе формы.
1
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
21.05.2015, 16:45  [ТС]
Я так понимаю сделать из richTextBox некое подобие WordPad это задача не из легких?

Мне нужно выделенный текст (RTF) делать жирным, наклонным, подчеркнутым, менять размер и сам шрифт. В идеале хочется это сделать как в WordPad. Т.е. отдельные кнопки и отдельный comboBox для выбора шрифта (не через диалог где можно все сразу сделать). Может уже есть готовый код? Самому писать я чую работы на несколько дней...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.05.2015, 18:01
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
Я так понимаю сделать из richTextBox некое подобие WordPad это задача не из легких?
Скажем так, не самая тривиальная

Можно работать со свойствами и методами самого контрола (особенно обратите внимание на те, в которых есть слово Selection), для полного контроля можно работать напрямую со свойством Rtf, в котором хранится "сырой" текст, а-ля разметка.
Для работы с последним рекомендую сначала ознакомиться со стандартом Rich Text Format.

Добавлено через 1 минуту
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
Мне нужно выделенный текст (RTF) делать жирным, наклонным, подчеркнутым, менять размер и сам шрифт.
Может и есть готовые решения, но из описываемых вами задач вроде ничего сложного — просто применяйте нужный шрифт к выделенному тексту через свойства, о которых сказано выше.
1
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
22.05.2015, 12:23  [ТС]
Задача оказалась тривиальной...
Вот панелька:
Название: panel.jpg
Просмотров: 251

Размер: 5.1 Кб
Три кнопки (Ж, К, Ч)на самом деле radioButton у которого свойство Appearance установлено как Button.
Ну а далее все просто.
Установки по умолчанию для comboBox выбора шрифта и размера шрифта:
C#
1
2
3
4
5
6
7
8
private void MainForm_Load(object sender, EventArgs e)
        {
            comboBoxFontSelect.Items.AddRange(FontFamily.Families.Select(f => f.Name).ToArray()); // спасибо ViterAlex
            string[] FontStandartSize = new string[] { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72" };
            comboBoxFontSize.Items.AddRange(FontStandartSize);
            comboBoxFontSize.SelectedIndex = 3;
            comboBoxFontSelect.SelectedItem = "Times New Roman";
        }
Далее настраиваем кнопки и comboBox так, чтобы они как WordPad отображались в соответствии с выделенным текстом.
Замечу что текст необязательно выделять а достаточно установить курсор в нужное место и все покажет как надо. (просто видел тут на форуме похожую проблему, но там читали теги в следствии чего работало только с выделенным текстом)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
        {
            Font SelectedCurrentFont = richTextBox1.SelectionFont;
            comboBoxFontSize.SelectedItem = SelectedCurrentFont.Size.ToString();
            comboBoxFontSelect.SelectedItem = SelectedCurrentFont.Name.ToString();
            checkBoxBold.Checked = false;
            checkBoxItalic.Checked = false;
            checkBoxUnLine.Checked = false;
            switch (SelectedCurrentFont.Style.ToString())
            {
                case "Bold":
                    checkBoxBold.Checked = true;
                    break;
                case "Italic":
                    checkBoxItalic.Checked = true;
                    break;
                case "Underline":
                    checkBoxUnLine.Checked = true;
                    break;
                case "Strikeout":
                    break;
                case "Regular":
                    break;
            }
        }
Ну и события на выбор шрифта, размера и стиля.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
private void checkBoxBold_Click(object sender, EventArgs e)
        {
            if (richTextBox1.SelectionFont != null)
            {
                System.Drawing.Font currentFont = richTextBox1.SelectionFont;
                System.Drawing.FontStyle newFontStyle;
 
                if (richTextBox1.SelectionFont.Bold == true)
                {
                    newFontStyle = FontStyle.Regular;
                }
                else
                {
                    newFontStyle = FontStyle.Bold;
                }
                richTextBox1.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
            }
        }
 
        private void checkBoxItalic_Click(object sender, EventArgs e)
        {
            if (richText1.SelectionFont != null)
            {
                System.Drawing.Font currentFont = richTextBox1.SelectionFont;
                System.Drawing.FontStyle newFontStyle;
 
                if (richTextBox1.SelectionFont.Italic == true)
                {
                    newFontStyle = FontStyle.Regular;
                }
                else
                {
                    newFontStyle = FontStyle.Italic;
                }
                richTextBox1.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
            }
        }
 
        private void checkBoxUnLine_Click(object sender, EventArgs e)
        {
            if (richTextBox1.SelectionFont != null)
            {
                System.Drawing.Font currentFont = richTextBox1.SelectionFont;
                System.Drawing.FontStyle newFontStyle;
 
                if (richTextBox1.SelectionFont.Underline == true)
                {
                    newFontStyle = FontStyle.Regular;
                }
                else
                {
                    newFontStyle = FontStyle.Underline;
                }
                richTextBox1.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
            }
        }
 
        private void comboBoxFontSelect_SelectedIndexChanged(object sender, EventArgs e)
        {
                Font SelectedCurrentFont = richTextBox1.SelectionFont;
                richTextBox1.SelectionFont = new Font(comboBoxFontSelect.SelectedItem.ToString(), SelectedCurrentFont.Size, SelectedCurrentFont.Style);
        }
        private void comboBoxFontSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Font SelectedCurrentFont = richTextBox1.SelectionFont;
            float newSize = (float) Convert.ToDouble(comboBoxFontSize.SelectedItem);
            richTextBox1.SelectionFont = new Font(SelectedCurrentFont.FontFamily, newSize, SelectedCurrentFont.Style);
        }
Не могу не привести источник откуда взято часть кода: http://www.frolov-lib.ru
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2015, 12:23
Помогаю со студенческими работами здесь

Записать в ComboBox имена жестких дисков в системе
Есть метод который получает сведения о жестких дисках. const UInt64 OneGb = 1073741824; //Байт в 1 гигабайт public void DiskInfo() ...

Заполнить ComboBox
Здравствуйте! Нужно мне ComboBox заполнить, числами от 0 до 23 и не получается. <ComboBox ItemsSource="{Binding...

Заполнить Combobox
есть база config.nsf в ней документы в документе есть поле "Тема" также есть база test в ней документ в нем есть комбобокс при открытии...

Заполнить ComboBox из DataGridView
Здравствуйте! В базе данных есть 3 столбца: фамилия, имя, отчество. Как их объединить в ComboBox, чтобы они были в одну строку?

Не получается заполнить ComboBox
Здравствуйте, мне нужно создать окошко, а в нем несколько элементов, в том числе и ComboBox. Вроде бы вкривь и вкось я его создала и что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru