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

Ширина текста в Textbox и подсчет строк

27.03.2014, 18:25. Показов 2645. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Суть закавыки в том, что мне необходимо отслеживать номер строки в textbox в реальном времени при включенном multiline и wordwrap ==true. При этом шрифт может меняться по кнопочке,т.е. с одним моноширинным не получится.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int n = 1;
float pop = 0;
 private void textBox1_TextChanged(object sender, EventArgs e)
        {
  Graphics g = CreateGraphics();
            float count = ((6+textBox1.Width)*n)-g.MeasureString(textBox1.Text, textBox1.Font).Width; //ширина  textbox'a минус ширина текста
            s++; // счетчик нажатых символов
            string sim;
            sim = textBox1.Text;
            char ch=sim[s-1]; // последний нажатый символ
            sim = Convert.ToString(ch); 
            float shir;
            shir =g.MeasureString(sim, textBox1.Font).Width+ count;//ширина последнего символа минус разница
            if (count < (0 + pop)) { n++; pop = pop - shir; }
 if (comboBox1.SelectedIndex != n)
            {
                comboBox1.Items.Add(n);
                comboBox1.SelectedIndex = n;
              }
но тут какой-то странный глюк. Ширина textbox - 237, при этом символ "г" влазит туда на 255.
И это еще не учитывая пробелы или "ENTER" , просто непрерывной строкой символов. Подскажите, где я что не так делаю?

Добавлено через 4 часа 13 минут
Или просто подскажите, когда wordwrap срабатывает - как он это делает, как отследить положение ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2014, 18:25
Ответы с готовыми решениями:

Подсчет количество строк в textbox-e и удаление строк
Как подсчитать количество строк в текстбоксе и вывести в label. В текст боксе загружен любой текстовый файл. И как удалить строчку...

Подсчет количества строк и символов в TextBox
Помогите решить такую задачу: Есть текстовое поле, т.е TextBox со свойствами: Multiline = True ScrollBars = 2-Вертикаль ...

Подсчет строк в textBox и изменения размера Label
Доброго всем времени суток. Подскажите как сделать: 1) Подсчет строк в textBox. 2) При увеличении числа в Label нужно чтобы...

3
40 / 40 / 15
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
27.03.2014, 22:19
Я бы вот так сделал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public int GetLineNumber()
        {
            if (textBox1.Text == String.Empty)
                return 0;
 
            String[] split = textBox1.Text.Split(new String[] { "\r\n" }, StringSplitOptions.None);
            int pos = textBox1.SelectionStart;
 
            for (int i = 0; i < split.Length; i++)
            {
                if (pos <= split[i].Length)
                    return i;
                else
                    pos = pos - split[i].Length - 2; // 2 - это "\r\n"
            }
 
            return -1;
        }
1
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
28.03.2014, 10:10
Лучший ответ Сообщение было отмечено beshen как решение

Решение

klsaymon, ему это не подойдёт. Так как при переносе текста на новую строку, в его случае, не будет ни '\r', ни '\n'.
beshen, Долго я искал за что бы зацепиться, лез даже в WINAPI, отлавливал WINMESSAGES, но как не странно, ничего интересного WIN не отсылала во время перехода на новую строку.
Но нашлось решение намного проще: метод GetPositionFromCharIndex()
Вот в общем считал строки я так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public int c = 0;
        public int Ys = 0;
        Point pnt;
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            pnt = textBox1.GetPositionFromCharIndex(textBox1.Text.Length - 1);
            if (pnt.Y > Ys)
            {
                c++;
            }
            label1.Text = "X=" + pnt.X + "Y=" + pnt.Y + " Количество строк= " + c.ToString();
            Ys = pnt.Y;
        }
1
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 16
29.03.2014, 05:14  [ТС]
Спасибо, люди! К сожалению, пока не могу попробовать, т.к. на работе. Но завтра прямо с утра начну )

Добавлено через 13 часов 19 минут
Красота! Работает как надо, еще раз спасибо es_!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2014, 05:14
Помогаю со студенческими работами здесь

Семантический анализ текста(Подсчёт количества одинаковых строк в списке)
Привет всем это снова я помогите мне у меня имеется база примерно в 2 гб не больше но не суть в виде списка и необходимо бесплатную...

Ширина textbox y gridview в режиме редактирования
Здравствуйте! Подскажите, как можно задать ширину поля ввода для грида в режиме редактирования, а то при нажатии кнопки edit появляются...

Ширина текста
Здравствуйте, господа! Есть у меня проблема с HTMl-сайтом, а именно с шириной текста. Я приложил скриншот, чтобы вы видели проблему-не могу...

Ширина текста в VBA
Доброго времени суток всем !!! Программированием в VBA занимаюсь недавно, нужда заставила. Так я в основном по Delphi. Так вот возникла...

Ширина выводимого текста в пикселях
Господа, пытаюсь тут определить ширину выводимого текста. Общий смысл: есть динамически формирующаяся символьная переменная и нужно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru