Hola a todos.

Este programa lo hice como tarea hace un semestre y pues aquí lo comparto con ustedes. Con el puedes aprender fácilmente a dibujar en Visual Basic .Net también a usar el lapiz, la brocha, colores, patrones y muchas cosas necesarias para poder hacer dibujos, graficos o lo que sea en Visual Basic .Net

Aquí está una imagen de como queda el programa:

Nota: click en la imagen para ver en grande

El codigo esta debidamente comentado así que no tendras problemas en entenderlo:

VB.NET:
  1. Imports System.Drawing.Drawing2D
  2.  
  3. Public Class Form1
  4.     Dim colorl As Color = Color.Black 'contiene el color del lápiz
  5.     Dim color1 As Color = Color.Purple 'contiene el primer color a usar en el degradado de la brocha
  6.     Dim color2 As Color = Color.White  'contiene el segundo color a usar en el degradado de la brocha
  7.     Dim estilo As LinearGradientMode = LinearGradientMode.Horizontal 'contiene el estilo por default para la brocha
  8.  
  9.     Private Sub cmddibujar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmddibujar.Click
  10.         'validamos que todos los datos necesarios ya hallan sido introducidos
  11.         If txtx.Text = "" Or txty.Text = "" Or txtalto.Text = "" Or txtancho.Text = "" Or ((rb_lapiz.Checked = True) And (txttamano.Text = "" Or (rb_personalizado.Checked = True And txtpersonalizado.Text = ""))) Or (rb_brocha.Checked = True And lb.SelectedItems.Count = 0) Then
  12.             MessageBox.Show("Llena correctamente los campos", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  13.             txttamano.Focus()
  14.         Else 'si ya introdujo toodos los campos necesarios...
  15.             'creamos area para dibujar
  16.             Dim gra As Graphics = pb.CreateGraphics
  17.             'creamos rectangulo
  18.             Dim rec As Rectangle = New Rectangle(txtx.Text, txty.Text, txtancho.Text, txtalto.Text) 'asignamos los datos introducidos a las coordenadas "X" "Y", ancho y alto respectivamente
  19.  
  20.             If rb_lapiz.Checked = True Then 'si selecciono el groupbox "Lápiz"
  21.                 'creamos pluma
  22.                 Dim pluma As Pen = New Pen(colorl, txttamano.Text) 'creamos una pluma con color seleccionado (por default negro) y tamaño introducido
  23.                 'seleccionamos estilo de la pluma
  24.                 If rb_guion.Checked = True Then
  25.                     pluma.DashStyle = Drawing2D.DashStyle.Dash
  26.                 Else
  27.                     If rb_guionpunto.Checked = True Then
  28.                         pluma.DashStyle = Drawing2D.DashStyle.DashDot
  29.                     Else
  30.                         If rb_guionpuntopunto.Checked = True Then
  31.                             pluma.DashStyle = Drawing2D.DashStyle.DashDotDot
  32.                         Else
  33.                             If rb_punto.Checked = True Then
  34.                                 pluma.DashStyle = Drawing2D.DashStyle.Dot
  35.                             Else
  36.                                 If rb_solida.Checked = True Then
  37.                                     pluma.DashStyle = Drawing2D.DashStyle.Solid
  38.                                 Else
  39.                                     If rb_personalizado.Checked = True Then
  40.                                         pluma.DashStyle = Drawing2D.DashStyle.Custom
  41.                                         Dim aux(txtpersonalizado.Text.Length) As String 'declaramos vector con el total de espacios igual al total de caracteres introducidos en el cuadro de texto "txtpersonalizado"
  42.                                         aux = txtpersonalizado.Text.Split(",") 'separamos por coma ","
  43.                                         Dim per(aux.Length - 1) As Single
  44.                                         'pasamos el array string al array single
  45.                                         For a As Integer = 0 To aux.Length - 1
  46.                                             per(a) = Val(aux(a))
  47.                                         Next
  48.                                         pluma.DashPattern = per
  49.                                     End If
  50.                                 End If
  51.                             End If
  52.                         End If
  53.                     End If
  54.                 End If
  55.                 'dibujamos rectangulo
  56.                 gra.DrawRectangle(pluma, rec)
  57.  
  58.             Else  'si eligio la brocha
  59.  
  60.                 If rb_colorsolido.Checked = True Then                 'si seleccionó color solido para llenar el rectangulo
  61.                     Dim Brocha As SolidBrush = New SolidBrush(color1) 'creamos una nueva brocha con color "color1" (por default purpura)
  62.                     gra.FillRectangle(Brocha, rec)                    'llenamos el rectangulo usando la nueva brocha que acabamos de crear y basandonos en el rectangulo "rec"
  63.                 ElseIf rb_rayado.Checked = True Then                  'si selecciono rayado para llenar el rectangulo
  64.                     'seleccionamos el estilo
  65.                     Dim estilo1 As HatchStyle
  66.                     Select Case lb.SelectedIndex
  67.                         Case 0
  68.                             estilo1 = HatchStyle.Horizontal
  69.                         Case 1
  70.                             estilo1 = HatchStyle.Vertical
  71.                         Case 2
  72.                             estilo1 = HatchStyle.ForwardDiagonal
  73.                         Case 3
  74.                             estilo1 = HatchStyle.BackwardDiagonal
  75.                     End Select
  76.                     Dim brocha As HatchBrush = New HatchBrush(estilo1, color1, color2) 'creamos la brocha, con el estilo y los dos colores seleccionados
  77.                     gra.FillRectangle(brocha, rec)                                     'llenamos el rectangulo con la brocha que acabamos de crear
  78.                 ElseIf rb_degradado.Checked = True Then
  79.                     Dim Brocha As LinearGradientBrush = New LinearGradientBrush(rec, color1, color2, estilo)
  80.                     gra.FillRectangle(Brocha, rec)
  81.                 End If
  82.  
  83.             End If  'end (If rb_lapiz.Checked = True Then)
  84.         End If
  85.     End Sub
  86.  
  87.     Private Sub cmdcolor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcolor.Click
  88.         Dim dlgcolor As ColorDialog = New ColorDialog 'creamos una clase "ColorDialog" para abrir el cuadro de dialogo de colores para seleccionar un color
  89.         dlgcolor.Color = colorl 'asignamos el color que estará seleccionado por default al abrir el dialogo de color, un color "colorl" el cual por default vale "negro"
  90.         If dlgcolor.ShowDialog() = Windows.Forms.DialogResult.OK Then 'si preciono OK en el cuadro de dialogo de colores, entonces la variable "colorl" (colorLapiz) contendra el color del lápiz a usar para dibujar la linea
  91.             colorl = dlgcolor.Color
  92.         End If
  93.     End Sub
  94.  
  95.     Private Sub cmdcolor1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcolor1.Click
  96.         Dim dlgcolor As ColorDialog = New ColorDialog 'creamos una clase "ColorDialog" para abrir el cuadro de dialogo de colores para seleccionar un color
  97.         If dlgcolor.ShowDialog() = Windows.Forms.DialogResult.OK Then 'si preciono OK en el cuadro de dialogo de colores, entonces la variable "color1" contendra el primer color usada en el degradado de la brocha
  98.             color1 = dlgcolor.Color
  99.         End If
  100.     End Sub
  101.  
  102.     Private Sub cmdcolor2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcolor2.Click
  103.         Dim dlgcolor As ColorDialog = New ColorDialog  'creamos una clase "ColorDialog" para abrir el cuadro de dialogo de colores para seleccionar un color
  104.         If dlgcolor.ShowDialog() = Windows.Forms.DialogResult.OK Then 'si preciono OK en el cuadro de dialogo de colores, entonces la variable "color2" contendra el segundo color usada en el degradado de la brocha
  105.             color2 = dlgcolor.Color
  106.         End If
  107.     End Sub
  108.  
  109.     Private Sub rd_lapiz_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb_lapiz.CheckedChanged
  110.         If rb_lapiz.Checked = True Then
  111.             gb1.Enabled = True  'habilitamos el groupbox del Lápiz
  112.         Else
  113.             gb1.Enabled = False 'deshabilitamos el groupbox del Lápiz
  114.         End If
  115.     End Sub
  116.  
  117.     Private Sub rd_brocha_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rb_brocha.CheckedChanged
  118.         If rb_brocha.Checked = True Then
  119.             gb2.Enabled = True 'habilitamos el groupbox de la brocha
  120.         Else
  121.             gb2.Enabled = False 'deshabilitamos el groupbox de la brocha
  122.         End If
  123.     End Sub
  124.  
  125.     Private Sub lb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb.SelectedIndexChanged
  126.         'dependiendo del estilo de brocha seleccionado, se asigna a la variable "estilo" el respectivo estilo seleccionado
  127.         Select Case lb.SelectedIndex
  128.             Case 0
  129.                 estilo = LinearGradientMode.Horizontal
  130.             Case 1
  131.                 estilo = LinearGradientMode.Vertical
  132.             Case 2
  133.                 estilo = LinearGradientMode.ForwardDiagonal
  134.             Case 3
  135.                 estilo = LinearGradientMode.BackwardDiagonal
  136.         End Select
  137.     End Sub
  138. End Class

Descarga