У меня есть программа, которая вызывает вторую форму.Эта вторая форма имеет поле со списком, заполненное содержимым внешнего файла, и пользователю необходимо выбрать параметр в поле со списком из представленных вариантов.Затем этот выбор передается обратно в основную форму, где выполняется много работы.
Это все работает хорошо, когда это делается в первый раз.Однако во второй раз, когда вызывается эта вторая форма, раскрывающийся список остается пустым.С помощью некоторой отладки я подтвердил, что выполняется правильный код и что записи добавляются через «SecondForm.ComboBox1.Items.Add» (я могу очистить комбинированный список, проверить его на ноль, прочитать данные и затем проверить элементы всписок снова увеличивается правильно) но они просто не отображаются в форме.Я не могу понять, почему или как это исправить.
И поэтому соответствующие части кода ....
На уровне формы у меня есть эта строка для настройки второгоформа, я думаю, мне нужно WithEvents для передачи выбранных данных, насколько я могу сказать:
Public Class Form1 Friend WithEvents SecondForm As New Form2
Public Sub OpenStripformatstxtToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenStripformatstxtToolStripMenuItem.Click
Dim fd As OpenFileDialog = New OpenFileDialog()
Dim pos1 As Integer
Dim pos2 As Integer
' Select the file to open
fd.Title = "Open File Dialog"
fd.InitialDirectory = "C:\BEST\Data"
fd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"
fd.FilterIndex = 1
fd.RestoreDirectory = True
' Put the filename selected in strfilename2
If fd.ShowDialog() = DialogResult.OK Then
strFileName2 = fd.FileName
Else : Return
End If
If SecondForm.IsDisposed Then
Dim secondform As New Form2
Я подозреваю, что эта строка выше является проблемой, я создаюсформировать во второй раз, но без параметра WithEvents.Однако я не могу использовать это из этой части кода, я получаю ошибку «WithEvents» не является допустимым объявлением локальной переменной ».Я читал, что закрытие и повторное открытие форм не является хорошим кодом, и что я должен скрывать / показывать их
secondform.Show()
InitializeComponent()
Else
SecondForm.Show()
End If
' Copy the file contents to a string called sfcontents (Strip Format Contents)
sfcontents = My.Computer.FileSystem.ReadAllText(fd.FileName)
' Define some points in the string, starting at the beginning
pos1 = 1
pos2 = 1
' Loop from the start to the end of the string
For pos1 = 1 To Len(sfcontents)
' Look for FO, the strip name header, do the following if you find it
If Mid(sfcontents, pos1, 3) = "FO " Then
pos1 = pos1 + 3
pos2 = pos1 + 1
'Find the space after "FO " so we've captured the whole next word, that's the strip name
Do Until Mid(sfcontents, pos2, 1) = " "
pos2 = pos2 + 1
Loop
' Add that strip name to the combobox for selecting by user
SecondForm.ComboBox1.Items.Add(Mid(sfcontents, pos1, pos2 - pos1))
Именно эта строка выше заполняет ComboBox, но эти данные НЕ отображаются наформа, которая отображается пользователю после показа первого экземпляра формы
End If
' Next step in the string
Next pos1
End Sub
Private Sub secondform_formclosing(sender As Object, e As FormClosingEventArgs) Handles SecondForm.FormClosing
Здесь есть несколько сотен строк кода, которые затем работают с данными, переданными иззакрытие формы, т.е. выбранное значение ComboBox.Все это прекрасно работает при первом запуске кода, но поскольку ComboBox пуст при последующих запусках, он не работает после этого.Рад опубликовать этот код, если кто-то думает, что это поможет, но я думаю, что на данном этапе это только запутает проблему, так как этот код кажется хорошим.Тем не менее, смотрите бит ниже об обработчиках событий ...
End Sub
Код на Form2.vb выглядит следующим образом:
Public Class Form2
Public selectedstrip As String '= ComboBox1.SelectedItem
Public stripfunction As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadioButton1.Checked Then stripfunction = 1
If RadioButton2.Checked Then stripfunction = 2
If RadioButton3.Checked Then stripfunction = 3
selectedstrip = ComboBox1.SelectedItem
Me.Close()
End Sub
End Class
Я читал немного онлайнЭто говорит о том, что закрытие и повторное открытие форм не является, извините за каламбур, хорошей формой.Однако тогда мне понадобятся обработчики событий для form.hide, и я не могу понять, как их использовать или даже чем они являются.Если скрытие формы является лучшим альтернативным решением, если кто-то может указать мне правильное направление для того, как это сделать и какие обработчики использовать вместо этого, то я буду благодарен.
Я, вероятно, что-то делаюневероятно глупо, потому что все, что я делаю, самоучка от поиска в Google, и мне, вероятно, не хватает лучшего понимания ПОЧЕМУ мне нужно делать определенные вещи, так что извиняюсь за любое невежество с моей стороны.Имея это в виду, если я делаю что-то совершенно глупо, я открыт для того, чтобы переписать это так, чтобы это помогло, но мне, возможно, понадобится какое-то владение рукой для этого!
Заранее спасибо залюбая помощь, которую может дать любой.