VB: экземпляр объекта в классе и использование в методах in

Поэтому я пытаюсь написать класс, который позволяет мне записывать вещи в файл при каждом событии тика объекта Timer. Моя форма также имеет кнопки включения и выключения, которые я хотел бы использовать для идеального создания экземпляра объекта Writer и закрытия его соответственно. У меня возникли проблемы с поиском в области, в которой объекты должны быть созданы и доступны.

Я включил код, относящийся к моей проблеме ниже.

Проблема в том, что oStreamWriter ограничен методом Set() и недоступен подпрограммам, которые просят его выполнить запись или просят закрыть его.

Я хочу создать класс этого процесса по двум причинам: 1) я хочу избежать использования объекта streamwriter в моем коде формы (изолирующий код пользовательского интерфейса) 2) я не смог создать экземпляр StreamWriter в подпрограмме OnButton_Click(), потому что это означало, что я не удалось получить к нему доступ в подпрограмме OffButt_Click(). Поэтому мне пришлось создать экземпляр в подпрограмме Form_Load(), что означало, что как только я нажимаю кнопку выключения и закрываю потоковую запись, нажатие кнопки o ссылается на объект, который теперь был закрыт.

Мой код класса выглядит следующим образом:

Public Class FileWriterClass

    ' dimension private properties
    Private pProperty As String ' dimension the property to write
    Private filenameString As String

    Public path As String = "C:\somefolder"

    ' Use set()and get() to set the property or get the property 
    Property TheProperty() As String

        Get
            Return pProperty
        End Get

        Set(ByVal inputValue As String)
            pProperty = inputValue
            Select Case pProperty
                Case "1"
                    filenameString = path + "\A.txt"
                Case "2"
                    filenameString = path+ "\B.txt"
            End Select

            ' instance the StreamWriter object
            oStreamWriter = New System.IO.StreamWriter(filenameString, True)

        End Set

    End Property

    Public Sub WriteToFile(ByVal someString As String, ByVal anotherString As String)
        oStreamWriter .WriteLine(someString + ", " + anotherString + ", " + DateTime.UtcNow.ToString)
    End Sub

    Public Sub CloseWriter()
        oStreamWriter .Close()
    End Sub

End Class

2 ответа

Решение

Вашему объекту streamwriter нужна ссылка на уровне класса, как вы делаете с именем файла:

Public Class FileWriterClass

' dimension private properties
Private pProperty As String ' dimension the property to write
Private filenameString As String

private mySR as StreamWriter

Public path As String = "C:\somefolder"

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

В качестве альтернативы, создайте его, когда класс создан, так как он кажется не очень полезным без имени файла и т. Д.

  private mySR as StreamWriter

  Public Sub New(filename As String)
      mySr = New StreamWriter(filename, ....)
  End Sub

Вы должны объявить объект StreamWriter как глобальный раздел для доступа к eveywhere в вашем коде, но есть еще один возможный способ доступа к тому же объекту, я имею в виду, что вы можете отправлять объект StreamWriter в качестве параметра любым методам, где вы хотите используй это.

Другие вопросы по тегам