Public Class Form1

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub

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

        ' Algo de texto que se carga por defecto.
        EntryArea.Rtf = "{\rtf1\ansi \b Este\b0  es un control \ul RichTextBox\ul0. \i Intente probar \i0  con algún \b formato\b0!  También pruebe con el botón alternativo del mouse para visualizar el menú contextual.}"
        ' Por defecto, la propiedad Opacity del Form está establecida al 100%, por eso la opción del menú tiene una marca.
        Me.onehundredPercent.Checked = True

    End Sub


    Private Sub fileMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles newToolStripMenuItem.Click, saveToolStripMenuItem.Click, openToolStripMenuItem.Click, exitToolStripMenuItem.Click
        ManipulateFile(CType(sender, ToolStripItem).Text)
    End Sub

    Private Sub fileToolStrip_ItemClicked(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles newToolStripButton.Click, saveToolStripButton.Click, openToolStripButton.Click
        ManipulateFile(CType(sender, ToolStripItem).Text)
    End Sub

    Private Sub formatMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles boldToolStripMenuItem.Click, underlineToolStripMenuItem.Click, italicsToolStripMenuItem.Click, formatUnderlineContextMenuItem.Click, formatItalicsContextMenuItem.Click, formatBoldContextMenuItem.Click
        FormatText(CType(sender, ToolStripMenuItem).Text)
    End Sub

    Private Sub changeOpacityToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles twentfivePercent.Click, seventyfivePercent.Click, onehundredPercent.Click, fiftyPercent.Click
        Dim menuItem As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
        Dim opacity As Double = Convert.ToDouble(menuItem.Tag.ToString() / 100)

        Me.Opacity = opacity

        Dim menuChangeOpacity As ToolStripMenuItem = CType(optionsToolStripMenuItem.DropDownItems(1), ToolStripMenuItem)
        For Each item As ToolStripMenuItem In menuChangeOpacity.DropDownItems
            item.Checked = False
        Next
        menuItem.Checked = True

    End Sub

    Private Sub FormatText(ByVal menuItemText As String)
        Dim fontOfSelectedText As Font = Me.EntryArea.SelectionFont
        Dim styleApplied As FontStyle

        Select Case menuItemText
            Case "&Negrita"
                If Me.EntryArea.SelectionFont.Bold = True Then
                    styleApplied = FontStyle.Regular
                Else
                    styleApplied = FontStyle.Bold
                End If
            Case "&Italica"
                If Me.EntryArea.SelectionFont.Italic = True Then
                    styleApplied = FontStyle.Regular
                Else
                    styleApplied = FontStyle.Italic
                End If
            Case Else
                If (Me.EntryArea.SelectionFont.Underline = True) Then
                    styleApplied = FontStyle.Regular
                Else
                    styleApplied = FontStyle.Underline
                End If
        End Select

        Dim FontToApply As Font = New Font(fontOfSelectedText, styleApplied)
        Me.EntryArea.SelectionFont = FontToApply

    End Sub

    Private Sub ManipulateFile(ByVal menuItemText As String)
        Select Case menuItemText
            Case "&Nuevo"
                ' Simula estar creando un nuevo documento pero simplemente 
                ' elimina el texto existente.
                EntryArea.Text = ""
                EntryArea.Focus()
            Case "&Abrir"
                ' Los cuadros de diálogo sólo se abren a modo demostrativo.
                ' No se lleva a cabo ninguna acción sobre el archivo seleccionado.
                If Me.openFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    MessageBox.Show("El botón Abrir fue presionado a los efectos de demostrar el uso del diálogo común 'Abrir'. El " + _
                     vbCrLf + " archivo " + Me.openFileDialog.FileName + " No será abierto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Case "&Grabar"
                ' Los cuadros de diálogo sólo se abren a modo demostrativo.
                ' No se lleva a cabo ninguna acción sobre el archivo seleccionado.
                If Me.saveFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    MessageBox.Show("El boton Grabar fue presionado a los efectos de demostrar el uso del diálogo común 'Grabar'." + _
                     vbCrLf + "El archivo " + Me.saveFileDialog.FileName + " no será grabado.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Case Else
                Me.Close()
                Me.Dispose()
        End Select
    End Sub

    Private Sub TestProgressBar()
        ' Ejecuta un bucle para simular una tarea que demora cierto tiempo
        ' a efectos de mostrar el avance de la barra de progreso hasta 
        ' su máximo valor.
        Do While toolStripProgressBar.Value < toolStripProgressBar.Maximum
            System.Threading.Thread.Sleep(10)
            toolStripProgressBar.Value = toolStripProgressBar.Value + 1
        Loop
        ' Reestablece la barra de progreso a su estado inicial.
        toolStripProgressBar.Value = toolStripProgressBar.Minimum
    End Sub


    Private Sub testProgressBarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles testProgressBarToolStripMenuItem.Click

        TestProgressBar()

    End Sub

    Private Sub formatToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles formatToolStripBoldButton.Click, formatToolStripUnderlineButton.Click, formatToolStripItalicsButton.Click
        FormatText(CType(sender, ToolStripItem).Text)
    End Sub
End Class
