faiqaa Ответов: 2

Как не сохранить данные в текстовом файле, если проверка не выполняется с помощью VB?


Форма позволяет мне сохранять данные клиента в текстовом файле при нажатии кнопки "Сохранить", я также несу проверку присутствия и проверку длины телефонного номера, введенного в текстовое поле каждый раз, когда пользователь нажимает кнопку Сохранить. Проблема заключается в том, что при неудачной проверке данные клиента не должны быть сохранены в текстовом файле, и в настоящее время они сохраняются.

Что я уже пробовал:

Dim emptyTextBoxes =
      From txt In Me.Controls.OfType(Of TextBox)()
     Where txt.Text.Length = 0
 Select txt.Name
     If emptyTextBoxes.Any Then 'this piece of code looks for all text boxes in the form, if any of them are blank their name would be included in the messagebox which reminds the user to fill them in'

     End If
     MessageBox.Show(String.Format("Please fill following textboxes: {0}",
                     String.Join(",", emptyTextBoxes)))


     If txtBox5.Text.Length < 9 Then
         MsgBox("Phone numbers must be at least 9 digits long") ' if the value entered in text box 5 is < 9 then the respective message box would be shown'
         txtBox5.Focus()
     End If
     If txtBox5.Text.Length > 11 Then
         MsgBox("Phone numbers must be of a maximum of 11 digits long") ' if the value entered in text box 5 is > 11 then the respective message box would be shown'
         txtBox5.Focus()
     End If

     Dim Filenum As Integer = FreeFile()


     FileOpen(Filenum, "Z:\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")

j snooze

вы можете сделать это многими способами. Вы можете установить логическое значение внутри логики проверки if, установить его в false при сбое проверки, а затем поместить условие if вокруг сохранения текстового файла. Прямо сейчас у вас нет никаких условий, связанных с сохранением текстового файла, поэтому он будет естественно сохраняться каждый раз, несмотря ни на что.

2 Ответов

Рейтинг:
9

ATeDe

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' Button to validate Phone numbers typed into TextBoxes
        Dim emptyTextBoxes =
                            From txt In Me.Controls.OfType(Of TextBox)()
                            Where txt.Text.Length = 0
                            Select txt.Name

        ' An array of type String() as equivalent of your Phones in TXT boxes
        Dim txtBoxes =
                        From txt In Me.Controls.OfType(Of TextBox).Reverse.ToArray
                        Select txt.Text

        Dim Result =
                     From txt In txtBoxes.Select(Function(Phone, Index) _
                         New With
                           {
                               .Phone = Phone,
                               .Index = Index,
                               .Length = Phone.Length
                           })
                     Order By txt.Index Ascending

        Dim i, j As Integer
        Dim WrongTxtBoxesA As New System.Text.StringBuilder
        Dim WrongTxtBoxesB As New System.Text.StringBuilder
        Dim Customers As New System.Text.StringBuilder
        For Each box In Result
            ' Presume that correct phone number IsNumeric and 9 digits long, otherwise is WRONG
            If Not (IsNumeric(Result(i).Phone.ToString)) Or Result(i).Phone.Length <> 9 Then
                WrongTxtBoxesA.Append(String.Format("The Box {0} is WRONG {1} {2}", Result(i).Index, Result(i).Phone, vbCrLf))
                WrongTxtBoxesB.Append(i.ToString & Space(1))
            Else
                Customers.Append("CustomerID:" & i.ToString & vbTab & "Phone:" & vbTab & Result(i).Phone & vbCrLf)
                j += 1
            End If
            i += 1
        Next

        If i > 0 Then
            MsgBox(String.Format("{0} {1} Please update following textboxes: {2}", WrongTxtBoxesA.ToString, vbCrLf, WrongTxtBoxesB.ToString))
        End If

        If j = 0 Then
            MsgBox("NO  customer has been successfully registered!!!")
        Else
            MsgBox(String.Format("{0} {1} {2} customer has been successfully registered ", Customers.ToString, vbCrLf, j))

            Dim Filenum As Integer = FreeFile()
            FileOpen(Filenum, "Z:\Desktop\Customers.txt", OpenMode.Append)
            'Text file is opened'

            PrintLine(Filenum, Customers.ToString)
            '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'
        End If

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' Button to populate 7 TxtBoxes and 7 labels
        Dim Boxes As String() = {"1234567xx", "123456xxx", "", "123456789", "987654321", "0", "PhoneNumber"}

        Dim txtboxes() As TextBox = Me.Controls.OfType(Of TextBox).Reverse.ToArray
        Dim labels() As Label = Me.Controls.OfType(Of Label).Reverse.ToArray

        Dim i As Integer
        For Each box In txtboxes
            box.Text = Boxes(i)
            i += 1
        Next
        i = 0
        For Each label In labels
            label.Text = "Box" & String.Format(i)
            i += 1
        Next
    End Sub
End Class


Maciej Los

Почему вы опубликовали еще один ответ?

ATeDe

Эй, Мацей, вместо того чтобы задавать смешные вопросы, помоги, дорогой человек, улучшить решение ...Разве вы не видите, что это далеко не идеально?

Модуль Module1
'эмулировать массив текстовых полей/ меток, как в версии VB6
Общественные txtBox() как TextBox = {форма form1.Поле Textbox1 На Форме Form1.Поле Textbox2, Форму Form1.Textbox3 И Форма Form1.TextBox4, Форму Form1.TextBox5, Форму Form1.TextBox6, Форму Form1.TextBox7}
Общественности, что mylabel() как Label = {форма form1.Метка1, Форму Form1.Метка2, Форму Form1.Метка3, Форму Form1.Label4, Форму Form1.Label5, Форму Form1.Label6, Форму Form1.Label7}
Телефоны общего пользования в виде строки() = {"1234567xx", "123456xxx", "", "123456789", "987654321", "0", "номер телефона"}
Конечный Модуль

Затем....

Частная суб методе form1_load(отправителя как объект, а равно EventArgs) обрабатывает ключевое слово mybase.Загрузить

Dim i как целое число
Для каждого lbl в myLabel
майлабель(i).Text = "клиент" & строка.Формат(i + 1)
i += 1
Следующий

Конец Подводной Лодки

Рейтинг:
19

ATeDe

Привет

j snooze


Я думаю, это то, что вы могли бы искать? Я не очень хорошо знаком с формами и всем этим джазом. VB.NET кроме того, завтра у нас здесь, в Ирландии, празднование Святого Патрика, поэтому я быстро написал этот фрагмент кода. массив строк txtBoxes имитирует содержимое ваших реальных текстовых полей. Это работает, но это только прототип, поэтому вы должны изменить и адаптировать свое приложение. Если у вас есть еще вопросы, не стесняйтесь, просто спросите... Да, также потребуется дополнительная проверка правильности телефонного номера (IsNumeric и так далее) удачи.

Атеде




Sub validateTxtBoxes()

        ' An array of type String() as equivalent of your numbers in TXT boxes
        Dim txtBoxes As String() = {"1234567", "123456", "", "123456789", "987654321", "0", "whatever"}

        Dim Result =
            (
                From Tel In txtBoxes.Select(Function(Number, Index) _
                         New With
                           {
                               .Number = Number,
                               .Index = Index,
                               .Length = Number.Length
                           }
                  )
                Order By Tel.Index Ascending
            )

        Dim i, j As Integer
        Dim WrongTxtBoxes As New System.Text.StringBuilder
        Dim Customers As New System.Text.StringBuilder
        For Each box In Result

            ' Presume that correct phone number is 9 digits long, all the rest is WRONG
            If Result(i).Number.Length <> 9 Then
                Console.WriteLine("The Box {0} is WRONG {1}",
                      Result(i).Index,
                      Result(i).Number)
                WrongTxtBoxes.Append(i.ToString & Space(1))
            Else
                Customers.Append("Customer:" & i.ToString & vbTab & "Number:" & vbTab & Result(i).Number & vbCrLf)
                j += 1
            End If
            i += 1
        Next



        If i > 0 Then

            'this piece of code looks for all text boxes in the form, 
            'If any Then Of them are blank their name would be included 
            'In the messagebox which reminds the user To fill them In
            MsgBox(String.Format("Please fill following textboxes: {0}", WrongTxtBoxes.ToString))

        End If

        If j = 0 Then
            MsgBox("NO  customer has been successfully registered!!!")

        Else

            MsgBox(j & " customer has been successfully registered")

            Dim Filenum As Integer = FreeFile()
            FileOpen(Filenum, "Z:\Desktop\Customers.txt", OpenMode.Append)
            'Text file is opened'

            PrintLine(Filenum, Customers.ToString)
            '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'
        End If


    End Sub