Рейтинг:
11
Maciej Los
Если вы хотите получить список текстовых полей, то какое имя вы хотите получить? txtBoxN
(где N
это число) и текстовое поле не пустое, тогда попробуйте это сделать:
Dim pattern As String = "^txtBox\d$"
Dim r As Regex = New Regex(pattern)
Dim notEmptyTextBoxes = Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length > 0 And r.Match(x.Name).Success) _
.ToList()
For Each tb As TextBox In notEmptyTextBoxes
MsgBox(String.Format("{0} {1}", tb.Name, tb.Text))
Next
Если вы хотите сообщить пользователю о текстовых полях для заполнения, попробуйте сделать это:
Dim msg = String.Join("; ", Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length = 0 And r.Match(x.Name).Success) _
.Select(Function(x) x.Name) _
.ToList())
MsgBox("Please, fill the following textboxes: " & vbCr & _
msg, MsgBoxStyle.Information, "Information")
faiqaa
ладно, моя вина, дайте мне посмотреть, работает ли это сейчас. Спасибо. Так что в основном я пытаюсь сохранить данные клиента и если текстовые поля пусты мне не нужно сохранять детали
однако если они будут заполнены, то мне это понадобится.
Maciej Los
Кстати: вы можете редактировать свои комментарии. Наведите на него курсор мыши, и с правой стороны вы увидите карандаш. ;)
faiqaa
Здравствуйте, не могли бы вы взглянуть на это?, одна вещь, которая происходит, заключается в том, что когда я заполнил все текстовые поля и нажал кнопку, я получаю несколько окон сообщений, показывающих мне информацию, введенную в различные текстовые поля, и последнее окно сообщения говорит:" пожалуйста, заполните следующие текстовые поля:"), это происходит даже тогда, когда они заполнены.
Dim PresenceCheck As Boolean
Dim pattern As String = "^txtBox\d$"
Dim r As Regex = New Regex(pattern)
Dim notEmptyTextBoxes = Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length > 0 And r.Match(x.Name).Success) _
.ToList()
For Each tb As TextBox In notEmptyTextBoxes
MsgBox(String.Format("{0} {1}", tb.Name, tb.Text))
Next
Dim msg = String.Join("; ", Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length = 0 And r.Match(x.Name).Success) _
.Select(Function(x) x.Name) _
.ToList())
PresenceCheck = False
MsgBox("Please, fill the following textboxes: " & vbCr & _
msg, MsgBoxStyle.Information, "Information")
If PresenceCheck = True Then
Dim Filenum As Integer = FreeFile()
FileOpen(Filenum, "C:\Users\Windows 7 User\Desktop\Customers.txt", OpenMode.Append) 'Text file is opened'
PrintLine(Filenum, txtBox1.Text & "," & txtBox2.Text & "," & txtBox3.Text & "," & txtBox4.Text & "," & txtBox5.Text & "," & txtBox6.Text) 'The data entered in the above text boxes is combined together separated with commas and stored into the open text file'
FileClose(Filenum) 'Once this is done the text file is closed and message below is displayed'
MessageBox.Show("Customer has been successfully registered")
End If
Maciej Los
Подумай об этом!
Dim pattern As String = "^txtBox\d$"
Dim r As Regex = New Regex(pattern)
Dim msg As String = String.Join("; ", Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length = 0 And r.Match(x.Name).Success) _
.Select(Function(x) x.Name) _
.ToList())
If msg<>"" Then MsgBox("Please, fill the following textboxes: " & vbCr & _
msg, MsgBoxStyle.Information, "Information")
msg = String.Join(",", Me.Controls.OfType(Of TextBox) _
.Where(Function(x) x.Text.Trim.Length > 0 And r.Match(x.Name).Success) _
.Select(Function(x) String.Concat(x.Name, ":", x.Text)) _
.ToList())
If msg<>"" Then
Dim Filenum As Integer = FreeFile()
FileOpen(Filenum, "C:\Users\Windows 7 User\Desktop\Customers.txt", OpenMode.Append) 'Text file is opened'
PrintLine(Filenum, msg) 'The data entered in the above text boxes is combined together separated with commas and stored into the open text file'
FileClose(Filenum) 'Once this is done the text file is closed and message below is displayed'
MessageBox.Show("Customer has been successfully registered")
End If
faiqaa
теперь он говорит: "разрешение перегрузки не удалось, потому что никакой доступный 'Concat' не может быть вызван с этими аргументами".
Maciej Los
Проверить еще раз.
faiqaa
Большое вам спасибо, сэр, он работает именно так, как мне было нужно.
Maciej Los
Экстра! Можете ли вы принять мой ответ как решение (чтобы удалить свой вопрос из списка без ответа)?
faiqaa
Сэр, в настоящее время,если все текстовые поля пусты, то детали не сохраняются в текстовом файле, однако если я набираю одно из текстовых полей, а другие пусты, то детали все еще сохраняются, и этого не должно произойти, так как все текстовые поля должны быть заполнены.
Maciej Los
Дорогой Фаика, все, что тебе нужно сделать, это измениться Where
заявление. Нет никакого способа узнать, если вы не пытаетесь решить проблему самостоятельно.
Вы не можете ожидать, что я решу все ваши вопросы одним ответом.
faiqaa
Это нормально, если я смотрю на оба утверждения, где они действительно кажутся прекрасными, в первом длина должна быть равна 0, а во втором она должна быть больше 0, так как я имею дело с заполненными текстовыми полями.
Maciej Los
Ты идешь в правильном направлении! Примечание: если требуется заполнить все текстовые поля, переменная [msg] (во второй раз) должна содержать все данные текстовых полей. Иначе говоря... данные из пустых текстовых полей не записываются в текстовый файл (потому что там нет данных).
Я очень рад, что вы сами начали решать этот вопрос.
Удачи вам!
Овации,
Мацей
faiqaa
Сэр, я изо всех сил стараюсь понять то,что вы сказали, так как мне пришлось также добавить проверку для телефонных номеров, которые я сделал, я все еще сталкиваюсь с той же проблемой, что и провал проверки, данные должны быть сохранены, что в настоящее время происходит, даже если одно текстовое поле пусто, данные не должны быть сохранены, и если номер телефона меньше 9 или больше 11, то то же самое должно произойти.
Код, который у меня сейчас есть, таков::
Тусклый узор в виде строки = "^txtBox\d$"
Dim r As Regex = новое регулярное выражение(шаблон)
Dim msg As String = строка.Join("; ", Me.Controls.Метод Oftype(В Текстовое Поле) _
.Где(функция(x) x.Text.Trim.Length = 0 и r.Match(x.Name).Успех) _
.Выберите(функция(x) x.Name) _
.Список())
Если msg <> "" , То MsgBox("пожалуйста, заполните следующие текстовые поля:" & vbCr & _
msg, MsgBoxStyle.Информация, "Информация")
сообщение = строка.Присоединиться(",", Мне.Контроля.Метод Oftype(В Текстовое Поле) _
.Где(функция(x) x.Text.Trim.Length > 0 и r.Match(x.Name).Успех) _
.Выберите(функция(х) строки.Конкат(x.Name, ":", x.текст)) _
.Список())
Если txtBox5.Text.Length < 9, то
MsgBox("телефонные номера должны быть длиной не менее 9 цифр") 'если значение, введенное в текстовое поле 5, равно < 9, то будет показано соответствующее окно сообщения'
txtBox5.Сосредоточить()
Ящик для сообщений.Показать("клиент не был успешно зарегистрирован")
Конец, Если
Если txtBox5.Text.Length > 11, то
MsgBox("телефонные номера должны иметь длину не более 11 цифр") 'если значение, введенное в текстовое поле 5, равно > 11, то будет показано соответствующее окно сообщения'
txtBox5.Сосредоточить()
Ящик для сообщений.Показать("клиент не был успешно зарегистрирован")
Конец, Если
Если msg < & gt; "" То
Dim Filenum As Integer = Свободный Файл()
FileOpen(Filenum, "C:\Users\Windows 7. User\Desktop\Customers.txt", OpenMode.Добавить) 'текстовый файл открыт'
Рисунком "printline" (как filenum, txtBox1.Текст и amp; "," &амп; txtBox2.Текст и amp; "," &амп; txtBox3.Текст и amp; "," &амп; txtBox4.Текст и amp; "," &амп; txtBox5.Текст и amp; "," &амп; txtBox6.Текст) 'ввод данных в указанных полях сочетается вместе через запятую и хранятся в открытом текстовом файле'
FileClose(Filenum) 'после этого текстовый файл закрывается и отображается сообщение ниже'
Ящик для сообщений.Показать("клиент успешно зарегистрирован")
Конец, Если
Сэр,я понимаю, что вы хотите, чтобы я учился, но сейчас я действительно в отчаянии, так как у меня есть крайний срок на завтра, я начал кодировать с нескольких месяцев. Я действительно не знаю, что делать дальше.
Richard Deeming
NB: FreeFile
/ FileOpen
/ PrintLine
/ FileClose
это древний способ записи VB6 в файл.
Раз уж ты употребляешь .NET, вы должны рассмотреть возможность использования .Чистый способ сделать это:
Как записать текст в файл | Microsoft Docs[^]
(Примеры приведены на языке C#, но их не так уж трудно перевести.)
If PresenceCheck Then
IO.File.AppendLine("C:\Users\Windows 7 User\Desktop\Customers.txt",
txtBox1.Text & "," & txtBox2.Text & "," & txtBox3.Text & "," & txtBox4.Text & "," & txtBox5.Text & "," & txtBox6.Text)
End If
И если это должен быть путь к рабочему столу текущего пользователя, вы должны использовать
Мой.Компьютер.файловая система.Специальные каталоги.Рабочий стол[
^] чтобы вернуть его:
Dim folderPath As String = My.Computer.FileSystem.SpecialDirectories.Desktop
Dim filePath As String = IO.Path.Combine(folderPath, "Customers.txt")
faiqaa
Подождите, вы ответили на главный вопрос наверху? или к комментариям?
Richard Deeming
Я отвечаю на ваш комментарий.
faiqaa
Но Сэр, вы написали "If PresenceCheck", я не использовал это в своем коде, и мне нужно было бы объявить его.
Richard Deeming
Комментарий, на который я ответил, имеет:
If PresenceCheck = True Then
Dim Filenum As Integer = FreeFile()
Если не вы написали этот комментарий, то кто же?
faiqaa
О да, я думал, что вы говорите о последнем комментарии, извините за недоразумение.