Страница: 1 | 2 | 3 |
Вопрос: Обработка текстовой информации
Добавлено: 28.01.11 17:02
Автор вопроса: Андрей
Ответы
Всего ответов: 41
Номер ответа: 16
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #16
Добавлено: 30.01.11 12:43
и MS.Dispose все равно будет вызван?..
Номер ответа: 17
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #17
Добавлено: 30.01.11 13:30
ну я обычно только dispose вызываю, про файл не подумал(((
Номер ответа: 18
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #18
Добавлено: 30.01.11 16:10
Скажите, а можно ли как-нибудь задать отступ всем линиям мультистрокового текстбокса? Хочется примитивненьким методом сделать так, чтобы каждая строка введенная в текстбокс, при записи в текстовый документ получала одинаковый отступ от начала строки.
Читал, что нужно воспользоваться ф-ей split, но не уразумел пока как это делается.
Номер ответа: 19
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #19
Добавлено: 30.01.11 21:06
split используется для разделения строки на элементы массива, в вашем случае надо чтото вроде этого:
переменная i - нужный отступ.
\n - константа перехода на новую строку в C#, в бейсике надо его константу, вродебы VbCrLf.
Номер ответа: 20
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #20
Добавлено: 30.01.11 23:00
Захарка, простите я никак не могу понять эту конструкцию.
Вы не согласились бы помочь мне с этим вопросом? Могу ли я скинуть Вам исходный проект?
Номер ответа: 21
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #21
Добавлено: 30.01.11 23:16
Всегда готов помочь, но может на словах получится обьяснить? Насколько я понял под этой конструкцией понимается предыдущий пример, в нём ничего сложного нет.
1)textBox1.Text.Split('\n') - эта часть кода преобразует текст написанный в текстбоксе в строковый массив, элементами которого будут являться строки записанные в textBox(один элемент - одна строка)
2)foreach (string s1 in textBox1.Text.Split('\n')) - цикл, в каждой итерации которого элемент из описанного выше массива записывается в переменную s1
3)s1.PadLeft(s1.Length + i, ' ') - команда PadLeft выравнивает строку по левому краю, и если первый аргумент больше длины строки, то добавляет слева пробелы, что нам и нужно.
4)s = s + s1.PadLeft(s1.Length + i, ' ') + '\n' - записывает каждую строку в переменную s
5)textBox1.Text = s - записываем результат в текстбокс
PS специально поставил бейсик, код на нём будет выглядеть так:
Номер ответа: 22
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #22
Добавлено: 30.01.11 23:36
Спасибо за разъяснения. Код работает, но выполняет не совсем то, что требовалось, видимо некорректно я описал задуманное. Взгляните пожалуйста на проект: http://zalil.ru/30428274 . Так будет проще понять мою проблему.
Обратите внимание, что по нажатию кнопки "Подтвердить" на диске С формируется текстовый файл. Открыв его вы увидите, что строки, в которых должны располагаться данные из текстбокса "ФИО" имеют разный отступ слева. Именно в этом у меня и заключается трудность, первую строку абзаца я сдвигаю с помощью пробелов, а на следующие таким методом повлиять не могу.
Я очень рассчитываю на Вашу помощь.
Номер ответа: 23
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #23
Добавлено: 31.01.11 00:53
Фух, не с первого раза, но понял в чём проблема. Я бы посоветовал сделать простой текстбокс, так на мой взгляд будет лучше выглядеть, но если с не прав, то надо добавить вот такой код:
этот код преобразовывает ФИО введённое в текстбокс (притом неважно пробелами разделены слова или переносом на новую строку) в три строчки с отступом в 5 пробелов.
PS
дам несколько полезных советов:
1)не обязательно писать:
2)не обязательно обьявлять переменные для TextBox1.Text, DateTimePicker1.Value, Numeric.Value и т.д., если они используются 1 или 2 раза
Номер ответа: 24
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #24
Добавлено: 31.01.11 01:11
И ещщё я бы посоветовал вместо семи лейблов и комбобоксов использовать массивы контролов, это позволит намного уменьшить и упростить код. А также я нашел ошибки:
1)при нажатии кнопки очистить количество номеров ставится равное 1, а полей для выбора цены нет совсем
2)при увеличении количества номеров поля для выбора цены прибавляются, а при уменьшении лишние не исчезают
Номер ответа: 25
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #25
Добавлено: 31.01.11 08:15
Вот пример кода для семи комбобоксов:
на форме только NumericUpDown1 который показывавет число видимых комбобоксов
Номер ответа: 26
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #26
Добавлено: 31.01.11 16:54
Большое спасибо за найденные ошибки и оптимизацию кода. Я и не рассчитывал на такую отзывчивость.
Но проблема с текстбоксом так и не решилась. По прежнему сдвиг осуществляется только для первой строки, но не для всех последующих.
Номер ответа: 27
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #27
Добавлено: 31.01.11 16:59
Захарка, прошу прощения, я поторопился с выводами - проверил функцией MsgBox. Все работает.
Огромное спасибо Вам за советы и помощь.
Номер ответа: 28
Автор ответа:
Андрей
Вопросов: 2
Ответов: 15
Профиль | | #28
Добавлено: 31.01.11 17:46
Мне уже неудобно Вас просить, но можно ли изменить код так, чтобы перенос осуществлялся по нажатию Enter, а не при появлении пробела? Дело в том, что требуется помимо фамилии заносить и имя с отчеством.
Номер ответа: 29
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #29
Добавлено: 31.01.11 21:48
А разве при нажатии клавиши Enter не работает? странно, вродебы должно, сейчас проверю
Номер ответа: 30
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #30
Добавлено: 31.01.11 21:54
Странно, я не совсем понимаю что у вас не работает. Вот так у меня всё правильно
ввожу:
Максименко Захар
Артёмович
Выводит
Максименко
Захар
Артёмович
Вот строчки связанные с получением ФИО из текстбокса и записью в файл: