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 в качестве параметра любым методам, где вы хотите используй это.