Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Обработка текстовой информации Добавлено: 28.01.11 17:02  

Автор вопроса:  Андрей

Ответить

  Ответы Всего ответов: 41  

Номер ответа: 16
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #16 Добавлено: 30.01.11 12:43
  1. Using MS As New IO.MemoryStream()
  2.     Throw New Exception
  3. End Using


и 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 - нужный отступ.
  1.  
  2. string s;
  3. int i = 5;
  4. foreach (string s1 in textBox1.Text.Split('\n'))
  5. {
  6.      s = s + s1.PadLeft(s1.Length + i, ' ') + '\n';
  7. }
  8. textBox1.Text = s;


\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 специально поставил бейсик, код на нём будет выглядеть так:
  1.  
  2.         Dim s As String = ""
  3.         Dim s1 As String = ""
  4.         Dim i As Integer = 5
  5.         For Each s1 In TextBox1.Text.Split(vbCrLf)
  6.             s = s + s1.PadLeft(s1.Length + i, " ") + vbCrLf
  7.         Next
  8.         TextBox1.Text = s

Ответить

Номер ответа: 22
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #22 Добавлено: 30.01.11 23:36
Спасибо за разъяснения. Код работает, но выполняет не совсем то, что требовалось, видимо некорректно я описал задуманное. Взгляните пожалуйста на проект: http://zalil.ru/30428274 . Так будет проще понять мою проблему.
Обратите внимание, что по нажатию кнопки "Подтвердить" на диске С формируется текстовый файл. Открыв его вы увидите, что строки, в которых должны располагаться данные из текстбокса "ФИО" имеют разный отступ слева. Именно в этом у меня и заключается трудность, первую строку абзаца я сдвигаю с помощью пробелов, а на следующие таким методом повлиять не могу.
Я очень рассчитываю на Вашу помощь.

Ответить

Номер ответа: 23
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #23 Добавлено: 31.01.11 00:53
Фух, не с первого раза, но понял в чём проблема. Я бы посоветовал сделать простой текстбокс, так на мой взгляд будет лучше выглядеть, но если с не прав, то надо добавить вот такой код:
  1.  
  2.         Dim txt As String = ""
  3.         Dim s As String = ""
  4.         Dim ch(0 To 1) As Char
  5.         ch = {" ", vbCrLf}
  6.         For Each s In TextBox1.Text.Split(ch)
  7.             txt = txt & s.PadLeft(s.Length + 5, " ") & vbCrLf
  8.         Next
  9.         TextBox1.Text = txt


этот код преобразовывает ФИО введённое в текстбокс (притом неважно пробелами разделены слова или переносом на новую строку) в три строчки с отступом в 5 пробелов.
PS
дам несколько полезных советов:
1)не обязательно писать:
Chr(32) & Chr(32) & Chr(32) & Chr(32) & Chr(32) &
можно обойтись всего лишь " "
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 который показывавет число видимых комбобоксов
  1.  
  2. Public Class Form1
  3.     Dim CB(0 To 7) As ComboBox 'обьявляем массив элементов
  4.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.         Dim i As Integer
  6.         For i = 0 To 7
  7.             CB(i) = New ComboBox()
  8.             CB(i).Left = 10 'обьявляем координаты
  9.             CB(i).Top = 10 + (CB(i).Height + 5) * i'обьявляем координаты
  10.             CB(i).Items.Add("2200")'Заполняем элементами
  11.             CB(i).Items.Add("2300")'Заполняем элементами
  12.             CB(i).Items.Add("2400")'Заполняем элементами
  13.             CB(i).Items.Add("2500")'Заполняем элементами
  14.             CB(i).SelectedIndex = 0
  15.             CB(i).Visible = False
  16.             Me.Controls.Add(CB(i))'добавляем на форму
  17.         Next
  18.     End Sub
  19.  
  20.     Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
  21.         Dim i As Integer
  22.         For i = 0 To 7
  23.             CB(i).Visible = False
  24.         Next
  25.         For i = 0 To NumericUpDown1.Value - 1
  26.             CB(i).Visible = True
  27.         Next
  28.     End Sub
  29. End Class
  30.  

Ответить

Номер ответа: 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
Странно, я не совсем понимаю что у вас не работает. Вот так у меня всё правильно

ввожу:
Максименко Захар
Артёмович


Выводит
     Максименко
     Захар
     Артёмович

Вот строчки связанные с получением ФИО из текстбокса и записью в файл:
  1.  
  2.         Txt1 = TextBox1.Text
  3.         Dim txt As String = ""
  4.         Dim s As String = ""
  5.         Dim ch(0 To 1) As Char
  6.         ch = {" ", vbCrLf}
  7.         For Each s In Txt1.Split(ch)
  8.             txt = txt & s.PadLeft(s.Length + 5, " ") & vbCrLf
  9.         Next
  10.         Txt1 = txt
  11.         form.WriteLine(Txt1)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам