Нажатие кнопки в Visual Basic - PullRequest
       3

Нажатие кнопки в Visual Basic

0 голосов
/ 10 августа 2010

Я новичок в Visual Basic.NET и просто играю с этим.У меня есть книга, в которой рассказывается, как читать из файла, а не как писать в файл одним нажатием кнопки.Все, что у меня есть, это кнопка и текстовое поле с именем fullNameBox.Когда я нажимаю кнопку, появляется ошибка необработанного исключения.Вот мой код:

Public Class Form1
    Sub outputFile()
        Dim oWrite As System.IO.StreamWriter
        oWrite = System.IO.File.CreateText("C:\sample.txt")
        oWrite.WriteLine(fullNameBox.Text)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        outputFile()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

Ответы [ 3 ]

1 голос
/ 10 августа 2010

Вы пытались пройтись по своему приложению, чтобы увидеть, где находится ошибка? На первый взгляд кажется, что вам может понадобиться использовать System.IO.File в четвертой строке (oWrite = IO.File ...) вместо просто IO, но я не пытался его запустить.

0 голосов
/ 11 февраля 2013

.NET Framework - очень мощный фреймворк.Точно так же (однако) у него есть простые и удобные методы для простых задач.Большинство людей, как правило, усложняют ситуацию, чтобы показать свои знания.Но меньше кода = меньше обработки = более быстрое и более эффективное приложение (иногда), поэтому большой вышеописанный метод может не подойти.Наряду с этим, вышеупомянутый метод был бы лучше записан как sub или если возвращал что-то, то функцию.

My.Computer.FileSystem.WriteAllText("File As String", "TextAsString", Append as Boolean)

A general Примером будет

My.Computer.FileSystem.WriteAllText("C:\text.text", "this is what I would like to add", False)

вот что я хотел бы добавить

canтакже может быть изменен на текущий текст поля.

, поэтому более специфический пример будет

My.Computer.FileSystem.WriteAllText("C:\text.text", fullNameBox.text, True)

Если вы хотите понять добавление часть кода

  • Установив append = true, вы разрешаете приложению писать текст в конце файла, оставляя остальную частьтекст уже в файле нетронутым.

  • Установив append = false, вы удалите и замените весь текст в существующем файле новым текстом

Если вы нене хочется писать эту часть кода (хотя она небольшая), вы можете создать подпрограмму для ее обработки, однако этот метод будет немного другим, только для этикета.функциональность останется схожей.(Использование StreamWriter )

Private Sub WriteText()
        Dim objWriter As New System.IO.StreamWriter("file.txt", append as boolean)
        objWriter.WriteLine(textboxname.Text)
        objWriter.Close()
    End Sub

Пример Определенный будет

Private Sub WriteText()
        Dim objWriter As New System.IO.StreamWriter("file.txt", False)
        objWriter.WriteLine(fullnamebox.Text)
        objWriter.Close()
    End Sub

, тогда при вызове события button_click:

writetext()

Вы также можете сделать шаг дальше .Если вы хотите создать более продвинутый Sub для обработки любого текстового поля и файла.

Допустим, вы планируете иметь несколько отдельных файлов и несколько полей для каждого файла (хотя есть и более элегантный метод MUCH ), вы можете создать функцию.{ Я объясню концепцию, лежащую в основе функции, как можно более подробно для этого примера. }

ниже - более продвинутая вспомогательная демонстрация для вашего запроса выше

Private Sub WriteText(Filename As String, app As Boolean, text As String)
        Dim objWriter As New System.IO.StreamWriter(Filename, app)
        objWriter.WriteLine(text)
        objWriter.Close()

End Sub

Это позволяет нам (в той же форме - если вам нужно это глобально, мы можем обсудить, что в другой раз, это не намного сложнее) вызвать функцию и ввести информацию какнеобходимо.

Дополнительное использование -> Общий образец

WriteText(Filename As String, app As Boolean)

Дополнительное использование -> Определенный образец

WriteText("C:\text.txt, False, fullnamebox.text)

Но лучшая часть этого метода в том, что вы можете изменить его на что угодно.Допустим, у вас есть Две кнопки * и ** Две ячейки , вы можете сделать так, чтобы button_event для первой кнопки запускал вышеуказанный код, а для второй кнопки - другой код.

Пример

WriteText("C:\text2.txt, False, halfnamebox.text)

Лучшая часть о создании ваших собственных функций и подпрограмм: Управление Я не буду вдаваться в это, потому что этобудет не по теме, но вы можете убедиться, что текстовое поле содержит текст, прежде чем писать файл.Это защитит целостность файлов.

Надеюсь, это поможет!Ричард Сайтс.

0 голосов
/ 30 апреля 2012
Imports System.IO
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SaveFileDialog1.FileName = ""
        SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName.Trim.Length <> 0 Then
            Dim fs As New FileStream(SaveFileDialog1.FileName.Trim, FileMode.Create)
            Dim sr As New StreamWriter(fs)
            sr.Write(TextBox1.Text)
            fs.Flush()
            sr.Close()
            fs.Close()
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        OpenFileDialog1.FileName = ""
        OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        OpenFileDialog1.ShowDialog()
        If OpenFileDialog1.FileName.Trim.Length <> 0 Then
            Dim fs As New FileStream(OpenFileDialog1.FileName.Trim, FileMode.Open)
            Dim sw As New StreamReader(fs)
            TextBox1.Text = sw.ReadToEnd
            fs.Flush()
            sw.Close()
            fs.Close()

        End If
    End Sub
End Class

это полнофункциональная программа, если вам нужно, вам просто нужно перетащить текстовое поле, openfiledialog и savefiledialog. не стесняйтесь играть с кодом. наслаждаться
Кстати, проблема в вашем коде состоит в том, что вы «должны» закрыть файловый поток, когда вы закончите использовать его, при этом будут освобождены любые ресурсы, такие как сокеты и файловые дескрипторы.

...