Как передать объект (чекбокс) по ссылке

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Как передать объект (чекбокс) по ссылке

Сообщение liric » 18.08.2006 (Пт) 12:17

Вопрос простой до безобразия. На форме есть checkbox. Есть модуль формы. Есть еще модуль класса. В модуле класса в public sub есть обращение к значению checkbox формы. Проблема в том что при обращению к нему из модуля класса оно всегда равно "по умолчанию" независимо как я его переключаю. Понимаю что неправильно обращаюсь к объекту чекбокса. Подскажите как надо.
В модуле формы checkbox это - cbPassive
В модуле класса:

Dim Pass As Project1.DataForm1
Pass = New Project1.DataForm1
ps = Pass.cbPassive.Checked

MsgBox(ps)
... MsgBox кажет всегда False

Это настолько просто что нигде об не пишут. К сожалению.
Если напрямую
hh = Project1.DataForm1.cbPassive - то ошибку дает "для ссылки на член не используемый совместно требуется ссылка на объект."

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как передать объект (чекбокс) по ссылке

Сообщение Viper » 18.08.2006 (Пт) 12:28

В нужный момент времени делай так:

Код: Выделить всё
MsgBox(Pass.cbPassive.Checked)


и все у тебя получится
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Re: Как передать объект (чекбокс) по ссылке

Сообщение liric » 18.08.2006 (Пт) 12:42

!Viper! писал(а):В нужный момент времени делай так:

Код: Выделить всё
MsgBox(Pass.cbPassive.Checked)


и все у тебя получится

Я это в общем и делаю всегда кажет FALSE.
Неважно как стоит флажок.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 12:44

не верю!
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:10

а придется поверить...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 13:15

Лучше показывай код. И чем больше, тем лучше
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:46

Код: Выделить всё
Public Sub DownloadFile(ByVal sFileName As String, ByVal sLocalFileName As String, ByVal bResume As Boolean)

        Dim ps, hh As Boolean

        Dim st As Stream
        Dim output As FileStream
        Dim cSocket As Socket
        Dim offset, npos As Long
        Dim EP As System.Net.EndPoint

        Dim Pass As pharmtek2.DataForm1
        Pass = New pharmtek2.DataForm1
        ps = Pass.cbPassive.Checked
        MsgBox(ps)


        MsgBox("Logon")
        If (Not (m_bLoggedIn)) Then
            Login()
        End If

        SetBinaryMode(True)

        If (sLocalFileName.Equals("")) Then
            sLocalFileName = sFileName
        End If

        If (Not (File.Exists(sLocalFileName))) Then
            st = File.Create(sLocalFileName)
            st.Close()
        End If

        output = New FileStream(sLocalFileName, FileMode.Open)


        If Pass.cbPassive.Checked Then
            MsgBox("Passive Soket")
            cSocket = CreateDataSocket()
        Else
            MsgBox("Direct Soket")
            cSocket = CreateDirectDataSocket()
        End If

        offset = 0

        If (bResume) Then
            offset = output.Length
            If (offset > 0) Then
                SendCommand("RETR " & offset)
                If (m_iRetValue <> 350) Then
                    'throw new IOException(reply.Substring(4));
                    'Some servers may not support resuming.
                    offset = 0
                End If
            End If
            If (offset > 0) Then
                npos = output.Seek(offset, SeekOrigin.Begin)
            End If
        End If
        SendCommand("RETR " & sFileName)
        MsgBox(m_sReply)
        If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
            MessageString = m_sReply
            'MsgBox(MessageString)
            Throw New IOException(m_sReply.Substring(4))
        End If
        Dim mySocket As Socket
        If Pass.cbPassive.Checked Then
            mySocket = cSocket
        Else


            mySocket = cSocket.Accept()
            If mySocket Is Nothing Then
                MsgBox(" ошибка сокета")
            End If
        End If
        Do While (True)
            m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
            'Try
            'MsgBox(m_aBuffer.Length)
            m_iBytes = mySocket.Receive(m_aBuffer, 0, m_aBuffer.Length, 0)
            'm_iBytes = cSocket.ReceiveFrom(m_aBuffer, 0, m_aBuffer.Length, 0, EP)
            'Catch ex As Exception
            '    MsgBox(ex.ToString)
            'End Try
            'MsgBox("получили байты")

            output.Write(m_aBuffer, 0, m_iBytes)

            If (m_iBytes <= 0) Then
                Exit Do
            End If
        Loop
        output.Close()
        If (mySocket.Connected) Then
            mySocket.Close()
        End If

        If (cSocket.Connected) Then
            cSocket.Close()
        End If



        ReadReply()
        If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then
            MessageString = m_sReply
            Throw New IOException(m_sReply.Substring(4))
        End If

    End Sub
Код: Выделить всё
Последний раз редактировалось liric 18.08.2006 (Пт) 14:00, всего редактировалось 2 раз(а).

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:47

Это было из Public Class FTPClass

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 13:49

Тебе знакомо понятие теги форматирования?

До их применения к твоему примеру, смотреть на него и пытаться понять что он делает никто не будет.

Кнопочка VB тебе в помошь
Последний раз редактировалось Viper 18.08.2006 (Пт) 13:53, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:50

В If всегда выпадает False т.е. MsgBox("Direct Soket")

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:53

Нет не знакомо

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 13:56

перемещаешься на свой пост с кодом, жмешь кнопку "Правка", выделяешь код, жмешь кнопку "VB", жмешь кнопку "Отправить"
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 13:56

Код: Выделить всё
Public Sub DownloadFile(ByVal sFileName As String, ByVal sLocalFileName As String, ByVal bResume As Boolean)

        Dim ps, hh As Boolean

        Dim st As Stream
        Dim output As FileStream
        Dim cSocket As Socket
        Dim offset, npos As Long
        Dim EP As System.Net.EndPoint

        Dim Pass As pharmtek2.DataForm1
        Pass = New pharmtek2.DataForm1
        ps = Pass.cbPassive.Checked
        MsgBox(ps)


        MsgBox("Logon")
        If (Not (m_bLoggedIn)) Then
            Login()
        End If

        SetBinaryMode(True)

        If (sLocalFileName.Equals("")) Then
            sLocalFileName = sFileName
        End If

        If (Not (File.Exists(sLocalFileName))) Then
            st = File.Create(sLocalFileName)
            st.Close()
        End If

        output = New FileStream(sLocalFileName, FileMode.Open)


        If Pass.cbPassive.Checked Then
            MsgBox("Passive Soket")
            cSocket = CreateDataSocket()
        Else
            MsgBox("Direct Soket")
            cSocket = CreateDirectDataSocket()
        End If

        offset = 0

        If (bResume) Then
            offset = output.Length
            If (offset > 0) Then
                SendCommand("RETR " & offset)
                If (m_iRetValue <> 350) Then
                    'throw new IOException(reply.Substring(4));
                    'Some servers may not support resuming.
                    offset = 0
                End If
            End If
            If (offset > 0) Then
                npos = output.Seek(offset, SeekOrigin.Begin)
            End If
        End If
        SendCommand("RETR " & sFileName)
        MsgBox(m_sReply)
        If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then
            MessageString = m_sReply
            'MsgBox(MessageString)
            Throw New IOException(m_sReply.Substring(4))
        End If
        Dim mySocket As Socket
        If Pass.cbPassive.Checked Then
            mySocket = cSocket
        Else


            mySocket = cSocket.Accept()
            If mySocket Is Nothing Then
                MsgBox(" ошибка сокета")
            End If
        End If
        Do While (True)
            m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length)
            'Try
            'MsgBox(m_aBuffer.Length)
            m_iBytes = mySocket.Receive(m_aBuffer, 0, m_aBuffer.Length, 0)
            'm_iBytes = cSocket.ReceiveFrom(m_aBuffer, 0, m_aBuffer.Length, 0, EP)
            'Catch ex As Exception
            '    MsgBox(ex.ToString)
            'End Try
            'MsgBox("получили байты")

            output.Write(m_aBuffer, 0, m_iBytes)

            If (m_iBytes <= 0) Then
                Exit Do
            End If
        Loop
        output.Close()
        If (mySocket.Connected) Then
            mySocket.Close()
        End If

        If (cSocket.Connected) Then
            cSocket.Close()
        End If



        ReadReply()
        If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then
            MessageString = m_sReply
            Throw New IOException(m_sReply.Substring(4))
        End If

    End Sub
Код: Выделить всё

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 13:59

Гм... Что то я не вижу в этом коде, чтоб форма Pass вообще отображалась бы, создание экземпляра есть, а вот ее отображение на эране отсутсвует, типа Pass.Show.
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 14:03

В том то и дело есть еще собственно класс формы

Public Class DataForm1
Inherits System.Windows.Forms.Form

где есть работа с формой , обработка событий итп. и откуда идет вызов процедуры класса FTPClass

Public Sub DownloadFile(ByVal sFileName As String, ByVal sLocalFileName As String, ByVal bResume As Boolean)

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 14:04

из которой я и пытаюсь "достать" значение чекбокса.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 14:09

Добавь в процедуру аргумент как показано здесь:
Код: Выделить всё
Public Sub DownloadFile(ByVal sFileName As String, ByVal sLocalFileName As String, ByVal bResume As Boolean,ByVal Pass As DataForm1)


и передавай в нее ссылку на форму, а строчки типа

Код: Выделить всё
Dim Pass As DataForm1
Pass = New DataForm1


убери.

З.Ы. Если приходит новая мысль до появления ответа от других пользователей, то не стоит создавать новый пост, можно просто отредактировать предыдущий, а то можно и замечание огрести
Весь мир матрица, а мы в нем потоки байтов!

liric
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.08.2006 (Пт) 12:14

Сообщение liric » 18.08.2006 (Пт) 14:15

Спасибо. Все действительно получилось.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 107

    TopList