GUI VB.Net Tutorial

'Programming .Net Windows Applications [ILLUSTRATED] (Paperback)
'by Jesse Liberty (Author), Dan Hurwitz (Author)
'# Publisher: O'Reilly Media, Inc.; 1 edition (October 28, 2003)
'# Language: English
'# ISBN-10: 0596003218
'# ISBN-13: 978-0596003210
imports System
imports System.Drawing
imports System.Windows.Forms
imports System.Text
namespace ProgrammingWinApps
  public class TextBoxes : inherits Form
    dim yDelta as integer
    dim yPos as integer = 20
    dim txtSingle as TextBox
    dim txtMulti as TextBox
    dim txtDisplay as TextBox
    dim btn as Button
    dim txtBoxes(1) as TextBox
    public sub New()
            Text = "TextBoxes"
      Size = new Size(450,375)
      dim lblSingle as new Label()
      lblSingle.Parent = me
      lblSingle.Text = "Single Line TextBox:"
      lblSingle.Location = new Point(10,yPos)
      lblSingle.Size = new Size(150,20)
      lblSingle.TextAlign = ContentAlignment.MiddleRight
      yDelta = lblSingle.Height + 10
      txtSingle = new TextBox()
      txtSingle.Parent = me
      txtSingle.Text = "Single Line"
      txtSingle.Size = new Size(200, txtSingle.PreferredHeight)
      txtSingle.Location = new Point(lblSingle.Left + _
                      lblSingle.Size.Width, yPos)
      txtSingle.Multiline = false
      txtSingle.BorderStyle = BorderStyle.Fixed3D
      dim lblMulti as new Label()
      lblMulti.Parent = me
      lblMulti.Text = "Multi Line TextBox:"
      lblMulti.Location = new Point(10, yPos + yDelta)
      lblMulti.Size = new Size(150,20)
      lblMulti.TextAlign = ContentAlignment.MiddleRight
      txtMulti = new TextBox()
      txtMulti.Parent = me
      txtMulti.Text = "Multi Line"
      txtMulti.Size = new Size(200,100)
      txtMulti.Location = new Point(lblMulti.Left + _
                  lblMulti.Size.Width, yPos + yDelta)
      txtMulti.AcceptsTab = true
      txtMulti.Multiline = true
      txtMulti.BorderStyle = BorderStyle.Fixed3D
      txtMulti.ScrollBars = ScrollBars.Vertical
      btn = new Button()
      btn.Parent = me
      btn.Text = "Show MultiLines"
      btn.Location = new Point(lblMulti.Left + _
              lblMulti.Size.Width, yPos + (5 * yDelta))
      AddHandler btn.Click, AddressOf btn_Click
      dim xSize as integer = CType((Font.Height * .75) * _
              btn.Text.Length, integer)
      dim ySize as integer = Font.Height + 10
      btn.Size = new Size(xSize, ySize)
      txtDisplay = new TextBox()
      txtDisplay.Parent = me
      txtDisplay.Text = ""
      txtDisplay.Size = new Size(200,100)
      txtDisplay.Location = new Point(lblMulti.Left + _
                lblMulti.Size.Width, yPos + (6 * yDelta))
      txtDisplay.Multiline = true
      txtDisplay.BorderStyle = BorderStyle.FixedSingle
      txtDisplay.BackColor = Color.LightGray
      txtDisplay.ScrollBars = ScrollBars.Vertical
      txtDisplay.ReadOnly = true
      '  Fill the array of TextBoxes
      txtBoxes(0) = txtSingle
      txtBoxes(1) = txtMulti
      '  Menus
      '  Edit menu items
      dim mnuDash1 as new MenuItem("-")
      dim mnuDash2 as new MenuItem("-")
      dim mnuUndo as new MenuItem("&Undo", _
                 new EventHandler(AddressOf mnuUndo_Click), _
                 Shortcut.CtrlZ)
      dim mnuCut as new MenuItem("Cu&t", _
              new EventHandler(AddressOf mnuCut_Click), _
              Shortcut.CtrlX)
      dim mnuCopy as new MenuItem("&Copy", _
              new EventHandler(AddressOf mnuCopy_Click), _
              Shortcut.CtrlC)
      dim mnuPaste as new MenuItem("&Paste", _
              new EventHandler(AddressOf mnuPaste_Click), _
              Shortcut.CtrlV)
      dim mnuDelete as new MenuItem("&Delete", _
              new EventHandler(AddressOf mnuDelete_Click))
      dim mnuSelectAll as new MenuItem("Select &All", _
              new EventHandler(AddressOf mnuSelectAll_Click), _
              Shortcut.CtrlA)
      dim mnuSelect5 as new MenuItem("Select First &5", _
              new EventHandler(AddressOf mnuSelect5_Click), _
              Shortcut.Ctrl5)
      dim mnuClear as new MenuItem("Clea&r", _
              new EventHandler(AddressOf mnuClear_Click))
      dim mnuEdit as new MenuItem("&Edit", _
              new MenuItem() {mnuUndo, mnuDash1, _
              mnuCut, mnuCopy, mnuPaste, mnuDelete, mnuDash2, _
              mnuSelectAll, mnuSelect5, mnuClear})
      '  View Menu items
      dim mnuScrollToCaret as new MenuItem("&Scroll to Caret", _
              new EventHandler(AddressOf mnuScrollToCaret_Click))
      dim mnuView as new MenuItem("&View", _
              new MenuItem() {mnuScrollToCaret})
      
      '  Main menu
      Menu = new MainMenu(new MenuItem() {mnuEdit, mnuView})
    end sub  '  close for constructor
    public shared sub Main() 
      Application.Run(new TextBoxes())
    end sub
    private sub mnuUndo_Click(ByVal sender As Object, _
                ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          if txt.CanUndo = true then
            txt.Undo()
            txt.ClearUndo()
          end if
        end if
      next
    end sub
    private sub mnuCut_Click(ByVal sender As Object, _
                  ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          if txt.SelectedText <> "" then
            txt.Cut()
          end if
        end if
      next
    end sub
    private sub mnuCopy_Click(ByVal sender As Object, _
                  ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          if txt.SelectionLength > 0 then
            txt.Copy()
          end if
        end if
      next
    end sub
    private sub mnuPaste_Click(ByVal sender As Object, _
                  ByVal e As EventArgs)
      if Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) = true then
        dim i as integer
        for i = 0 to txtBoxes.Length - 1
          if txtBoxes(i).Focused then
            dim txt as TextBox = CType(txtBoxes(i), TextBox)
            if txt.SelectionLength > 0 then
              if MessageBox.Show( _
              "Do you want to overwrite the currently selected text?", _
              "Cut & Paste", MessageBoxButtons.YesNo) = _
                    DialogResult.No then
                txt.SelectionStart = txt.SelectionStart + _
                          txt.SelectionLength
              end if
            end if
            txt.Paste()
          end if
        next
      end if
    end sub
    private sub mnuDelete_Click(ByVal sender As Object, _
                  ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          if txt.SelectionLength > 0 then
            txt.SelectedText = ""
          end if
        end if
      next
    end sub
    private sub mnuClear_Click(ByVal sender As Object, _
                  ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          txt.Clear()
        end if
      next
    end sub
    private sub mnuSelect5_Click(ByVal sender As Object, _
                    ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          if txt.Text.Length >= 5 then
            txt.Select(0,5)
          else
            txt.Select(0,txt.Text.Length)
          end if
        end if
      next
    end sub
    private sub mnuSelectAll_Click(ByVal sender As Object, _
                    ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          txt.SelectAll()
        end if
      next
    end sub
    private sub mnuScrollToCaret_Click(ByVal sender As Object, _
                      ByVal e As EventArgs)
      dim i as integer
      for i = 0 to txtBoxes.Length - 1
        if txtBoxes(i).Focused then
          dim txt as TextBox = CType(txtBoxes(i), TextBox)
          txt.ScrollToCaret()
        end if
      next
    end sub
    private sub btn_Click(ByVal sender as object, _
                ByVal e as EventArgs)
      ' Create a string array to hold the Lines property.
      dim arLines(txtMulti.Lines.Length - 1) as string
      arLines = txtMulti.Lines
      '  Use stringBuilder for efficiency.
      dim str as string = "Line" + vbTab + "String" + vbCrLf
      dim sb as new StringBuilder()
      sb.Append(str)
      ' Iterate through the array & display each line.
      dim i as integer
      for i = 0 to arLines.Length - 1
        str = i.ToString() + "." + vbTab + arLines(i) + vbCrLf
        sb.Append(str)
      next
      txtDisplay.Text = sb.ToString()
    end sub
  end class
end namespace