Как интегрировать текущую форму в форму MDI - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь открыть файлы, используя OpenFileDialog, независимо от количества открытых файлов. FileStream объект должен быть использован. По большей части, я думаю, что я понял это. В настоящее время пытаюсь выяснить, что такое свойство формы MDI Child. Более того, я пытаюсь перенести это в мой текущий проект. Я хочу иметь возможность открывать столько файлов, сколько захочу, выбрав mnuFutureValue, затем набрав их и сохранив эти файлы. Это текстовый редактор, который я уже создал.

Dim filePathway As String = UNTITLED_FILE
Private Const UNTITLED_FILE As String = "Untitled"
Dim fileContentContainer As String = String.Empty
Dim isFileTerminated As Boolean = False


Private Sub mnuOpen_Click(sender As Object, e As EventArgs) Handles mnuOpen.Click

    HasChanged()

    If isFileTerminated <> True Then
        Me.Text = "Untitled"
        openFileDialog.Filter = "Text files (*.txt)|*.txt"

        If openFileDialog.ShowDialog() = DialogResult.OK Then
            Try
                filePathway = openFileDialog.FileName
                Dim fileStream As New FileStream(filePathway, FileMode.Open, FileAccess.Read)
                Dim readStream As New StreamReader(fileStream)

                txtTextEditer.Text = readStream.ReadToEnd()
                fileContentContainer = txtTextEditer.Text
                CurrentFileName()
                openFileDialog.FileName = String.Empty
                readStream.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        Else
            CurrentFileName()
        End If
    End If
End Sub


Private Sub mnuSave_Click(sender As Object, e As EventArgs) Handles mnuSave.Click
    Me.Text = "Save File "
    If filePathway = UNTITLED_FILE Then
        saveFileDialog.Filter = "Text files (*.txt)|*.txt"
        If saveFileDialog.ShowDialog = DialogResult.OK Then
            Try
                filePathway = saveFileDialog.FileName
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        Else
            CurrentFileName()
            Exit Sub
        End If
    End If
    FileSaver(filePathway)
    CurrentFileName()
End Sub


Private Sub mnuSaveAs_Click(sender As Object, e As EventArgs) Handles mnuSaveAs.Click
    Me.Text = "Save File As"
    saveFileDialog.Filter = "Text files (*.txt)|*.txt"
    If saveFileDialog.ShowDialog() = DialogResult.OK Then
        Try
            filePathway = saveFileDialog.FileName
            FileSaver(filePathway)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End If
    CurrentFileName()
End Sub


Private Sub mnuNew_Click(sender As Object, e As EventArgs) Handles mnuNew.Click
    HasChanged()
    If isFileTerminated <> True Then
        txtTextEditer.Text = String.Empty
        fileContentContainer = txtTextEditer.Text
        filePathway = UNTITLED_FILE
        CurrentFileName()
    End If
End Sub

Private Sub HasChanged()
    isFileTerminated = False
    If txtTextEditer.Text <> fileContentContainer Then
        Dim msgBoxResult = MsgBox("Unsaved changes will be lost. Would you like to save your " & filePathway.ToString() & " document and exit?", MsgBoxStyle.YesNoCancel, "Warning!")
        If msgBoxResult = DialogResult.Yes Then
            mnuSave.PerformClick()
        ElseIf msgBoxResult = DialogResult.Cancel Then
            isFileTerminated = True
        End If
    End If
End Sub

Private Sub FileSaver(path As String)

    Dim fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
    Dim writeStream As New StreamWriter(fileStream)


    writeStream.Write(txtTextEditer.Text)
    writeStream.Close()


    saveFileDialog.FileName = String.Empty
    fileContentContainer = txtTextEditer.Text
End Sub


Private Sub CurrentFileName()
    Me.Text = Path.GetFileName(filePathway) & " - Text Editer"
End Sub


Private Sub mnuCut_Click(sender As Object, e As EventArgs) Handles mnuCut.Click
    My.Computer.Clipboard.SetText(txtTextEditer.SelectedText)
    txtTextEditer.SelectedText() = String.Empty
End Sub


Private Sub mnuCopy_Click(sender As Object, e As EventArgs) Handles mnuCopy.Click
    My.Computer.Clipboard.SetText(txtTextEditer.SelectedText)
End Sub


Private Sub mnuPaste_Click(sender As Object, e As EventArgs) Handles mnuPaster.Click
    txtTextEditer.SelectedText() = My.Computer.Clipboard.GetText()
End Sub


Private Sub mnuExit_click(sender As Object, e As EventArgs) Handles mnuExit.Click
    Application.Exit()
End Sub

Private Sub frmTextEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    e.Cancel = True
    HasChanged()
    If isFileTerminated <> True Then
        e.Cancel = False
    End If
End Sub


Private Sub mnuAbout_Click(sender As Object, e As EventArgs) Handles mnuAbout.Click
    MsgBox("" & vbCrLf & vbCrLf & "" & vbCrLf & vbCrLf & "" & vbCrLf & vbCrLf & "", MsgBoxStyle.OkOnly, "")
End Sub


Private Sub frmTextEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    CurrentFileName()
End Sub


Private Sub mnuClose_Click(sender As Object, e As EventArgs) Handles mnuClose.Click
    Me.Close()
End Sub

Private Sub mnuNewFutureValue_Click(sender As Object, e As EventArgs) Handles mnuNewFutureValue.Click
    Dim futureValueForm As New ChildForm
    futureValueForm.MdiParent = Me
    futureValueForm.Show()
End Sub

Конечный класс

1 Ответ

0 голосов
/ 16 апреля 2020

У вас будет возможность выбрать файл в родительской форме MDI. Вы можете поместить функцию открытия и чтения файла в дочернюю форму, и в этом случае вы можете просто передать путь к файлу к этой форме, например,

Public Class ChildForm

    Private filePath As String

    Public Sub New(filePath As String)
        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

        Me.filePath = filePath
    End Sub

    Private Sub ChildForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Text = IO.File.ReadAllText(filePath)
    End Sub

End Class

В этой родительской форме вы затем сделаете это :

Using ofd As New OpenFileDialog
    If ofd.ShowDialog() = DialogResult.OK Then
        Dim mdiChild As New ChildForm(ofd.FileName)

        mdiChild.MdiParent = Me
        mdiChild.Show()
    End If
End Using

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

Public Class ChildForm

    Public Property Data As String
        Get
            Return TextBox1.Text
        End Get
        Set
            TextBox1.Text = Value
        End Set
    End Property

End Class

и

Using ofd As New OpenFileDialog
    If ofd.ShowDialog() = DialogResult.OK Then
        Dim mdiChild As New ChildForm

        mdiChild.Data = IO.File.ReadAllText(ofd.FileName)
        mdiChild.MdiParent = Me
        mdiChild.Show()
    End If
End Using

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

...