Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возращение значения из списка в вызывающую форму

68K
27 февраля 2011 года
edyapd
3 / / 27.02.2011
В программировании на VB ноль, но понадобилось создать интерфейс для обмена данными по СОМ порту с микроконтролером.
Установил Visual Studio 2008 и VB 2008, теперь пытаюсь изучить данный язык.
Просьба к знатокам помочь в данном вопросе.
Теперь конкретно что сделано:
Имеется Form1 с Button1, при нажатии которой появляется Form2
Код:
Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        GetSerialPortNames()
    End Sub
    Sub GetSerialPortNames()
        ' Показать все возможные COM порты
        For Each sp As String In My.Computer.Ports.SerialPortNames
            ListBox1.Items.Add(sp)
        Next
    End Sub

    Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
        'Выбор строки DblClick. Закрытие формы. Возвращение в вызывающую форму выбраного значения
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        'Выбор строки с подтверждением ОК
        Dim curItem As String = ListBox1.SelectedItem.ToString()
    End Sub

    Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
        'Подтверждение выбраной строки. Закрытие формы. Возвращение в вызывающую форму выбраного значения
    End Sub

    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
        'Закрытие формы. Ни чего не возвращаем
        Me.Close()
    End Sub

End Class

Подскажите как можно присвоить значению PortIO из первой формы, значение выбраное из списка.
327
27 февраля 2011 года
UserNet2008
748 / / 03.04.2010
Можно создать Модуль Проект -Добавить новый элемент - Модуль

В Модуле объявить переменную например
[COLOR="blue"]Module[/COLOR] MyModule

[COLOR="blue"]Public[/COLOR] curItem [COLOR="blue"]As[/COLOR] [COLOR="#556b2f"]String[/COLOR]

[COLOR="blue"]End Module[/COLOR] теперь переменная видна в двух формах.

Или другой вариант из Form1 обратиться Form2
В коде Form1 пишите так

[COLOR="blue"]Private Sub[/COLOR] Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click

Form2.ListBox1.т.д
или
Dim a
a = Form2.ListBox1.т.д

[COLOR="blue"]End Sub[/COLOR]
68K
27 февраля 2011 года
edyapd
3 / / 27.02.2011
Спасибо. Тоже додумался до этого, создать модуль. Но это чисто телепатия, когда Вы писали ответ я как раз задумался над таким способом. Теперь у меня получилась Form2 в таком виде:
Код:
Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        GetSerialPortNames()
    End Sub
    Sub GetSerialPortNames()
        ' Показать все возможные COM порты
        For Each sp As String In My.Computer.Ports.SerialPortNames
            ListBox1.Items.Add(sp)
        Next

        If PortIO <> "" Then
            [COLOR="#ff0000"]'Хотелось бы установить указатель на ранее выбраную строку[/COLOR]
        End If

    End Sub

    Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
        'Выбор строки DblClick. Закрытие формы. Возвращение в вызывающую форму выбраного значения
        PortIO = ListBox1.SelectedItem.ToString()
        Me.Close()
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        'Выбор строки с подтверждением ОК
    End Sub

    Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
        'Подтверждение выбраной строки. Закрытие формы. Возвращение в вызывающую форму выбраного значения
        PortIO = ListBox1.SelectedItem.ToString()
        Me.Close()
    End Sub

    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
        'Закрытие формы. Ни чего не возвращаем
        Me.Close()
    End Sub

End Class

Там где выделено красным ни могу ни чего придумать.
327
27 февраля 2011 года
UserNet2008
748 / / 03.04.2010





У меня только СОМ1 см. рис.

Цитата:
Там где выделено красным ни могу ни чего придумать.'Хотелось бы установить указатель на ранее выбраную строку




Может так
[COLOR="blue"]Private Sub[/COLOR] ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
'Выбор строки с подтверждением ОК
PortIO = ListBox1.SelectedItem.ToString()
memSelectedIndex = ListBox1.SelectedIndex
[COLOR="blue"]End Sub[/COLOR]

а это выражение при вызове Form2
ListBox1.SelectedIndex = memSelectedIndex

p.s Коней добавил для Эксперимента и все работает

68K
01 марта 2011 года
edyapd
3 / / 27.02.2011
Огромное спасибо.
Главное всё просто. Но не зная азов не додумаешься. На несколько раз проходился по всем этим выражения, которые после точки стоят, но так и не сообразил какое из них можно использовать.
Ну и memSelectedIndex я так понял тоже надо определить Глобальной переменой в модуле.
327
01 марта 2011 года
UserNet2008
748 / / 03.04.2010
Вот код программы
[COLOR="#006400"]Form1 содержит Button1 и Label1[/COLOR]

[COLOR="blue"]Public Class[/COLOR] [COLOR="red"]Form1[/COLOR]

Private Sub [COLOR="#ff00ff"]Button1[/COLOR]_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Form2.FindSerialPort(Form2)
[COLOR="#ff00ff"]Label1[/COLOR].Text = Nothing
PortIO = Nothing
Form2.ListBox1.SelectedIndex = memSelectedIndex
End Sub

[COLOR="blue"]End Class[/COLOR]

[COLOR="blue"]Public Class[/COLOR] [COLOR="red"]Form2[/COLOR]

Dim frmClient As Form

Public Sub FindSerialPort(ByRef Tb As Form)
frmClient = Tb
Me.Visible = False
Me.Show(frmClient.Parent)
End Sub

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Показать все возможные COM порты
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next

End Sub

Private Sub [COLOR="#ff00ff"]cmdCancel[/COLOR]_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click
'Закрытие формы. Ни чего не возвращаем
Me.Close()

End Sub

Private Sub [COLOR="#ff00ff"]cmdOk[/COLOR]_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOk.Click
'Подтверждение выбраной строки. Закрытие формы. Возвращение в вызывающую форму выбраного значения
Form1.Label1.Text = PortIO
Me.Close()
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
'Выбор строки с подтверждением ОК
PortIO = ListBox1.SelectedItem.ToString()
memSelectedIndex = ListBox1.SelectedIndex

End Sub
[COLOR="blue"]End Class[/COLOR]

[COLOR="blue"]Module[/COLOR] [COLOR="red"]Module1[/COLOR]
Public PortIO As String
Public memSelectedIndex As Integer
[COLOR="blue"]End Module[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог