Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
1

Подсчёт количества символов в каждой строке textBox

05.09.2015, 12:25. Просмотров 1098. Ответов 13
Метки нет (Все метки)

Здравствуйте.
Есть задача, нужно в textBox (с включённым свойством MultiLine), просчитать длину строки и если длинна превышает 5 введённых чисел, то нужно либо перейти на другую строку или просто больше ничего не вводить в этой строке. как это сделать не знаю... пере пробовал всё что в голову пришло...
вот то что пытался сделать:

C#
1
2
3
4
5
6
7
8
for (int i = 0; i <= textBox1.Lines.Length-1; i++)
 
            {
                if (textBox1.TextLength-1 > 4) //Если больше 4 символов
                {
                    textBox1.AppendText(Environment.NewLine + textBox1.Text.Substring(3));
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2015, 12:25
Ответы с готовыми решениями:

Подсчёт выделенных символов в textBox
Вот ссылка на простейший текстовый редактор, написанный мною при просмотре...

Ограничение количества символов, введенных в TextBox
С ограничением ввода я разобрался, char c = e.KeyChar; int i = (int)c; if...

Определить число слов в каждой строке RichTextBox, содержащих букву из TextBox
Написать функцию, которая определяет количество слов в данной строке,...

Удаление последних символов в каждой строке файла
Добрый вечер еще раз :) Суть такова: Есть текстовый файл, в котором содержится...

Подсчитать количество символов в каждой строке и массив чисел с количествами записать в другой текстовый файл
Данные считываются с текстового файла(1) и записываются в другой(2). Есть...

13
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
05.09.2015, 16:24  [ТС] 2
Нет, у меня C#

Добавлено через 6 минут
Вот я написал код, но работает не совсем так как нужно. Переход на новую строку происходит, но курсор возвращается в начало первой строки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int g = Convert.ToInt32(textBox1.Lines.Length);
            for (int i = 0; i < g; i++)
 
            {
                          if (Convert.ToInt32(textBox1.Lines[i].Length) > 5) //Если больше 4 символов
                                {
                    textBox1.Text = textBox1.Lines[i].TrimEnd('6')+Environment.NewLine; 
                }
            }
               
            }
1
Moloch
124 / 118 / 68
Регистрация: 27.08.2015
Сообщений: 232
05.09.2015, 20:21 3
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
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        // Флаг, свидетельствующий о недопустимой ситуации.
        private bool invalidInput = false;
 
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            invalidInput = false;
 
            // Пропускаем переходы на следующую строку без штрафов.
            if (e.KeyCode == Keys.Enter)
                return;
 
            // На какой строке мы сейчас находимся
            int line = textBox1.GetLineFromCharIndex(this.textBox1.SelectionStart);
            if (line < textBox1.Lines.Length)
            {
                // Текст строки, на которой расположен курсор.
                string lineText = textBox1.Lines[line];
                if (lineText.Length >= 5)
                {
                    invalidInput = true;
                }
            }
        }
 
        // This event occurs after the KeyDown event and can be used to prevent
        // characters from entering the control.
        // ([url]https://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.keydown%28v=vs.110%29.aspx[/url])
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (invalidInput)
                e.Handled = true;
        }
    }
0
EvilFromHell
944 / 843 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
05.09.2015, 20:43 4
Есть еще нюанс с буфером обмена, если про него забыть-можно будет откопировать в текстбокс что угодно:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication105
{
    public class NumberBox : TextBox
    {
        const int WM_PASTE = 0x0302;
        //const int WM_CHAR = 0x0102;
 
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_PASTE)
            {
                if (Clipboard.ContainsText())
                {
                    string s = Clipboard.GetText();
                    foreach (char ch in s) { if (!Char.IsDigit(ch)) { return; } }
                    if (this.Lines.Length > 0) { if (this.Lines[this.GetLineFromCharIndex(this.SelectionStart)].Length + s.Length > 5) { return; } }
                }
            }
            base.WndProc(ref m);
        }
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsControl(e.KeyChar))
            {
                if (!Char.IsDigit(e.KeyChar)) { e.Handled = true; }
                if (textBox1.Lines.Length > 0) { if (textBox1.Lines[textBox1.GetLineFromCharIndex(this.textBox1.SelectionStart)].Length > 4) { e.Handled = true; } }
            }
        }
 
    }
}
По уму надо бы точно так же перехватывать WM_CHAR вместо обработчика KeyPress, но суть я думаю понятна.
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
05.09.2015, 22:03  [ТС] 5
Огромное спасибо!
1 пример работает так как надо. Но вот с Буфером не очень понятно.... я не так давно изучаю C# если можно приведите плиз пример по работе с буфером....
Буду очень благодарен!

Добавлено через 1 минуту
а вот кстати не совсем ещё ясно со вторым примером.. что он делает... или это тоже самое только в кратце ?
0
EvilFromHell
944 / 843 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
05.09.2015, 23:53 6
а вот кстати не совсем ещё ясно со вторым примером.. что он делает... или это тоже самое только в кратце ?
Второй пример позволяет вводить в текстбокс только цифры, вводить их в каждую строку не больше 5ти штук, а так же ,при попытке скопировать какой-то текст в текстбокс, проверяет ,чтобы он состоял только из цифр и на него хватало места в строке, иначе-не копирует. Класс NumberBox создан для того, чтобы переопределить оконную процедуру текстбокса и отловить тот момент, когда из буфера туда будет что-то вставляться. Текстбокс в Designer.cs должен быть создан как:
C#
1
this.textBox1 = new NumberBox();
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
06.09.2015, 07:06  [ТС] 7
EvilFromHell, огромное спасибо за разъяснение, очень мне помогли.
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
07.09.2015, 12:39  [ТС] 8
у меня появилась ещё проблема..... правда не совсем по этой теме может подскажите где можно посмотреть или как решить.
В общем я запускаю стороннее приложение. приложение запускается как надо. Не могу поймать ошибку которую выдаёт приложение когда введён не верный логин.
0
EvilFromHell
944 / 843 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
07.09.2015, 12:47 9
Это уже зависит исключительно от того, как устроено это самое стороннее приложение.
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
07.09.2015, 12:52  [ТС] 10
ну когда я руками запускаю, это приложение пишет свой лог в txt и выдаёт ошибку - типо пароль и логин не верные, а когда это приложение запускается из мое программы то лог перестаёт писаться и ошибку перестаёт выдавать.
0
Moloch
124 / 118 / 68
Регистрация: 27.08.2015
Сообщений: 232
07.09.2015, 14:01 11
А сами приложения находятся в различных директориях? Если да, попробуйте следующий код с установкой рабочей директории:
C#
1
2
3
4
            ProcessStartInfo processStartInfo = new ProcessStartInfo();
            processStartInfo.WorkingDirectory = @""; // Директория запускаемого процесса.
            processStartInfo.FileName = @"ConsoleApplication1.exe";
            Process process = Process.Start(processStartInfo);
Вероятно в запускаемом приложении работа ведётся не с абсолютными путями, а с относительными. И лог, может быть, пишется, но пишется в директорию запускающего процесса.
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
07.09.2015, 14:28  [ТС] 12
спасибо, сёдня ночью попробую
0
Serj U_zi
0 / 0 / 0
Регистрация: 07.01.2015
Сообщений: 13
17.02.2016, 00:28 13
rocker2003, Спасибо! коротко и по сути, люблю когда так
0
rocker2003
1 / 1 / 0
Регистрация: 06.08.2015
Сообщений: 35
18.02.2016, 01:48  [ТС] 14
У меня всё получилось ещё раз спасибо попозже выложу рабочий код если конечно нужно.. программу пришлось забросить на работе очень к этому отнеслись не хорошо.........
0
18.02.2016, 01:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 01:48

Ввод массивов через множество textBox, подсчёт суммы, и вывод через listBox. Ошибка при вводе через textBox
Создал я кучу текст боксов, там происходит ввод каждого элемента массива. И...

Подсчёт количества запусков с записью в реестр
Как мне реализовать подсчёт запусков с записью в реестр? Интересует САМ...

Textbox. Поиск, выделение и подсчёт одинаковых чисел
Я только начал заниматься C# и есть такой вопрос. Допустим, есть несколько...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru