VB.NET Чтение 2 флажков статуса из файла - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь восстановить статус 2-х флажков.Эти 2 флажка я заставил их работать как radiobuttun: пока один установлен, другой снимите флажок.

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

Для этого я использую этот код:

   Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing

    Dim thefile As String = Application.StartupPath & "\SafetyBox.cfg"
    Dim lines() As String = System.IO.File.ReadAllLines(thefile)

    lines(1) = "Language_file=" & ComboBox1.Text
    If CheckBox1.Checked = True Then
        lines(2) = "Status1=" & "1"
    Else
        lines(2) = "Status1=" & "0"
    End If
    If CheckBox2.Checked = True Then
        lines(3) = "Status2=" & "1"
    Else
        lines(3) = "Status2=" & "0"
    End If
    System.IO.File.WriteAllLines(thefile, lines)

End Sub`

И эта часть прекрасно работает.Status1 должен быть состоянием checkbox1, а status2 - состоянием checkbox2.

Код, который не работает:

 Dim path As String = Application.StartupPath & "\SafetyBox.cfg"
    If File.Exists(path) Then

        Using sr As StreamReader = New StreamReader(path)

            Dim linenew As String = sr.ReadLine()
            If linenew.Contains("\") Then
                TextBox1.Text = linenew



            Else
                MsgBox("Configura il programma da usare")
            End If

            Dim lineN As String = sr.ReadLine()
            If lineN.Contains("Language_file=") Then
                ComboBox1.Text = lineN.Split("=").Last()
            End If
            If lineN.Contains("Status1=1") Then
                CheckBox1.Checked = True
                CheckBox2.Checked = False

            ElseIf lineN.contains("Status1=0") Then
                CheckBox1.Checked = False
                CheckBox2.Checked = True

            End If



            If lineN.Contains("Status2=1") Then
                CheckBox1.Checked = False
                CheckBox2.Checked = True

            ElseIf lineN.Contains("Status2=0") Then
                CheckBox1.Checked = True
                CheckBox2.Checked = False
            End If
                sr.ReadToEnd()
            sr.Close()
        End Using

Можете ли вы позволить мне понять, где моя ошибка?Почему, когда в файле .cfg правильно написано Status1 = 0 и Status2 = 1, при загрузке программы я всегда вижу checkbox1 checkd, а не checkbox2?

Спасибо

1 Ответ

0 голосов
/ 24 мая 2018

Вы написали, что CheckBoxes работает как RadionButtons.Я подозреваю, что для этого вы обработали одно или оба события CheckedChanged и CheckStateChanged.

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

Когда вы загружаете конфигурацию / состояние формы из файла, вы устанавливаете значения в CheckBoxes и, следовательно, запускаете события.Чтобы предотвратить запуск событий, вы должны временно удалить обработчики событий из элементов управления Checkbox.

Добавьте строки в начале вашего метода для загрузки конфигурации:

RemoveHandler Checkbox1.CheckStateChanged, AddressOf Checkbox1_CheckStateChanged
RemoveHandler Checkbox2.CheckStateChanged, AddressOf Checkbox2_CheckStateChanged

И,в конце метода вам нужно будет переустановить обработчики событий, используя:

AddHandler Checkbox1.CheckStateChanged, AddressOf Checkbox1_CheckStateChanged
AddHandler Checkbox2.CheckStateChanged, AddressOf Checkbox2_CheckStateChanged

Если это проблема, то, с чем вы столкнулись, является достаточно распространенной проблемой, когда форма имеет несколько событийобработчики, которые отвечают на xxxChanged события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...