BIORRITMOS
[Programa base para el cálculo de biorritmos]

Fecha: domingo 29 de Junio de 2003 (07/Jul/2003)
Autor: Jordi del Rio jordi@mesopotamia-2001.com


El código aqui presentado no es ninguna maravilla de la "ciencia y de la técnica" solo se trata de un programa base para el cálculo de biorritmos. Después lo adornáis según os plazca.

El código original estaba en C# y en Ingles, así que como he podido (todo mi ingles se resume ha haber trabajado de camionero en ruta internacional ) lo he traducido al castellano ( rectifico, al catalán que es como aparece en la aplicación que estoy construyendo y luego al castellano). A parte de los 3 biorritmos clásicos he añadido 6 más. Los primarios son los más conocidos (físico, intelectual y emocional) los secundarios, son combinaciones de los primarios. El ciclo de la Pasión p.e. surge de la media ente el físico y el emocional. Finalmente he añadido 4 , llamados superiores, Intución, Estetica, Autoconsciencia y espritualiad (aqui anoto que estos últimos solo sirven para "obsesos" como un serevidor de las paraciencias, astrologia, etc).

 

"Anem per feina" que decimos los catalanes , es decir, "manos a la obra"

Ingredientes básicos :

2 datetimepicker, Uno para la fecha de nacimiento y otro para la fecha actual o que desemos calcular

1 textbox, Para el nombe (no sirve de mucho pero adorna el programa)

1 PictureBox :. Donde se dibujarán los ciclos ( "La madre del cordero", el arroz de la paella)

1 label : Donde pondremos los dias que llevamos vividos,

Labels, al gusto de cada uno si queremos adornar el biorritmo con etiquetas que nos indiquen el dia exacto etc (como la sal en la vida), Yo No las he puesto me limito a presentar la base del programa




Public Class Form1
   Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

   Public Sub New()
      MyBase.New()

      'El Diseñador de Windows Forms requiere esta llamada.
      InitializeComponent()

      'Agregar cualquier inicialización después de la llamada a InitializeComponent()

   End Sub

   'Form reemplaza a Dispose para limpiar la lista de componentes.
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then
         If Not (components Is Nothing) Then
            components.Dispose()
         End If
      End If
      MyBase.Dispose(disposing)
   End Sub

   'Requerido por el Diseñador de Windows Forms
   Private components As System.ComponentModel.IContainer

   'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
   'Puede modificarse utilizando el Diseñador de Windows Forms. 
   'No lo modifique con el editor de código.
   Friend WithEvents BioCanvas As System.Windows.Forms.PictureBox
   Friend WithEvents BoxEmoc As System.Windows.Forms.CheckBox
   Friend WithEvents BoxMental As System.Windows.Forms.CheckBox
   Friend WithEvents BoxFisic As System.Windows.Forms.CheckBox
   Friend WithEvents BoxIntu As System.Windows.Forms.CheckBox
   Friend WithEvents BoxEst As System.Windows.Forms.CheckBox
   Friend WithEvents BoxAutoC As System.Windows.Forms.CheckBox
   Friend WithEvents BoxEsp As System.Windows.Forms.CheckBox
   Friend WithEvents BoxPasion As System.Windows.Forms.CheckBox
   Friend WithEvents BoxDomini As System.Windows.Forms.CheckBox
   Friend WithEvents BoxSabi As System.Windows.Forms.CheckBox
   Friend WithEvents DataC As System.Windows.Forms.DateTimePicker
   Friend WithEvents FechaN As System.Windows.Forms.DateTimePicker
   Friend WithEvents Label1 As System.Windows.Forms.Label
   Friend WithEvents Label2 As System.Windows.Forms.Label
   Friend WithEvents tbNombre As System.Windows.Forms.TextBox
   Friend WithEvents lbDiasV As System.Windows.Forms.Label

   Private Sub InitializeComponent()
      Me.BioCanvas = New System.Windows.Forms.PictureBox()
      Me.BoxEmoc = New System.Windows.Forms.CheckBox()
      Me.BoxMental = New System.Windows.Forms.CheckBox()
      Me.BoxFisic = New System.Windows.Forms.CheckBox()
      Me.BoxIntu = New System.Windows.Forms.CheckBox()
      Me.BoxEst = New System.Windows.Forms.CheckBox()
      Me.BoxEsp = New System.Windows.Forms.CheckBox()
      Me.BoxAutoC = New System.Windows.Forms.CheckBox()
      Me.BoxPasion = New System.Windows.Forms.CheckBox()
      Me.BoxDomini = New System.Windows.Forms.CheckBox()
      Me.BoxSabi = New System.Windows.Forms.CheckBox()
      Me.DataC = New System.Windows.Forms.DateTimePicker()
      Me.FechaN = New System.Windows.Forms.DateTimePicker()
      Me.Label1 = New System.Windows.Forms.Label()
      Me.Label2 = New System.Windows.Forms.Label()
      Me.tbNombre = New System.Windows.Forms.TextBox()
      Me.lbDiasV = New System.Windows.Forms.Label()
      Me.SuspendLayout()
      '
      'BioCanvas
      '
      Me.BioCanvas.BackColor = System.Drawing.SystemColors.ActiveCaption
      Me.BioCanvas.Location = New System.Drawing.Point(43, 75)
      Me.BioCanvas.Name = "BioCanvas"
      Me.BioCanvas.Size = New System.Drawing.Size(337, 177)
      Me.BioCanvas.TabIndex = 0
      Me.BioCanvas.TabStop = False
      '
      'BoxEmoc
      '
      Me.BoxEmoc.ForeColor = System.Drawing.Color.Red
      Me.BoxEmoc.Location = New System.Drawing.Point(67, 260)
      Me.BoxEmoc.Name = "BoxEmoc"
      Me.BoxEmoc.Size = New System.Drawing.Size(81, 24)
      Me.BoxEmoc.TabIndex = 3
      Me.BoxEmoc.Text = "Emocional"
      '
      'BoxMental
      '
      Me.BoxMental.ForeColor = System.Drawing.Color.Green
      Me.BoxMental.Location = New System.Drawing.Point(67, 313)
      Me.BoxMental.Name = "BoxMental"
      Me.BoxMental.Size = New System.Drawing.Size(77, 24)
      Me.BoxMental.TabIndex = 4
      Me.BoxMental.Text = "Mental"
      '
      'BoxFisic
      '
      Me.BoxFisic.ForeColor = System.Drawing.Color.Blue
      Me.BoxFisic.Location = New System.Drawing.Point(67, 286)
      Me.BoxFisic.Name = "BoxFisic"
      Me.BoxFisic.Size = New System.Drawing.Size(81, 24)
      Me.BoxFisic.TabIndex = 5
      Me.BoxFisic.Text = "Fisic"
      '
      'BoxIntu
      '
      Me.BoxIntu.ForeColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(64, Byte), CType(0, Byte))
      Me.BoxIntu.Location = New System.Drawing.Point(164, 261)
      Me.BoxIntu.Name = "BoxIntu"
      Me.BoxIntu.Size = New System.Drawing.Size(81, 24)
      Me.BoxIntu.TabIndex = 8
      Me.BoxIntu.Text = "Intuitiu"
      '
      'BoxEst
      '
      Me.BoxEst.ForeColor = System.Drawing.Color.Aqua
      Me.BoxEst.Location = New System.Drawing.Point(164, 284)
      Me.BoxEst.Name = "BoxEst"
      Me.BoxEst.Size = New System.Drawing.Size(81, 24)
      Me.BoxEst.TabIndex = 9
      Me.BoxEst.Text = "Estetic"
      '
      'BoxEsp
      '
      Me.BoxEsp.ForeColor = System.Drawing.Color.Magenta
      Me.BoxEsp.Location = New System.Drawing.Point(164, 340)
      Me.BoxEsp.Name = "BoxEsp"
      Me.BoxEsp.Size = New System.Drawing.Size(81, 24)
      Me.BoxEsp.TabIndex = 10
      Me.BoxEsp.Text = "Espirtual"
      '
      'BoxAutoC
      '
      Me.BoxAutoC.ForeColor = System.Drawing.Color.Yellow
      Me.BoxAutoC.Location = New System.Drawing.Point(164, 311)
      Me.BoxAutoC.Name = "BoxAutoC"
      Me.BoxAutoC.Size = New System.Drawing.Size(113, 24)
      Me.BoxAutoC.TabIndex = 11
      Me.BoxAutoC.Text = "Auto Consciencia"
      '
      'BoxPasion
      '
      Me.BoxPasion.ForeColor = System.Drawing.Color.Salmon
      Me.BoxPasion.Location = New System.Drawing.Point(282, 256)
      Me.BoxPasion.Name = "BoxPasion"
      Me.BoxPasion.Size = New System.Drawing.Size(81, 24)
      Me.BoxPasion.TabIndex = 12
      Me.BoxPasion.Text = "Passió"
      '
      'BoxDomini
      '
      Me.BoxDomini.ForeColor = System.Drawing.Color.CornflowerBlue
      Me.BoxDomini.Location = New System.Drawing.Point(282, 284)
      Me.BoxDomini.Name = "BoxDomini"
      Me.BoxDomini.Size = New System.Drawing.Size(81, 24)
      Me.BoxDomini.TabIndex = 13
      Me.BoxDomini.Text = "Domini"
      '
      'BoxSabi
      '
      Me.BoxSabi.ForeColor = System.Drawing.Color.Khaki
      Me.BoxSabi.Location = New System.Drawing.Point(282, 308)
      Me.BoxSabi.Name = "BoxSabi"
      Me.BoxSabi.Size = New System.Drawing.Size(81, 24)
      Me.BoxSabi.TabIndex = 14
      Me.BoxSabi.Text = "Sabiduria"
      '
      'DataC
      '
      Me.DataC.Location = New System.Drawing.Point(44, 50)
      Me.DataC.MinDate = New Date(1899, 1, 1, 0, 0, 0, 0)
      Me.DataC.Name = "DataC"
      Me.DataC.ShowUpDown = True
      Me.DataC.TabIndex = 16
      '
      'FechaN
      '
      Me.FechaN.Format = System.Windows.Forms.DateTimePickerFormat.Short
      Me.FechaN.Location = New System.Drawing.Point(138, 13)
      Me.FechaN.MinDate = New Date(1899, 1, 1, 0, 0, 0, 0)
      Me.FechaN.Name = "FechaN"
      Me.FechaN.ShowUpDown = True
      Me.FechaN.Size = New System.Drawing.Size(84, 20)
      Me.FechaN.TabIndex = 17
      '
      'Label1
      '
      Me.Label1.Location = New System.Drawing.Point(18, 11)
      Me.Label1.Name = "Label1"
      Me.Label1.Size = New System.Drawing.Size(116, 23)
      Me.Label1.TabIndex = 18
      Me.Label1.Text = "Fecha de Nacimiento"
      Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
      '
      'Label2
      '
      Me.Label2.Location = New System.Drawing.Point(234, 10)
      Me.Label2.Name = "Label2"
      Me.Label2.Size = New System.Drawing.Size(72, 23)
      Me.Label2.TabIndex = 19
      Me.Label2.Text = "Nombre"
      Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
      '
      'tbNombre
      '
      Me.tbNombre.Location = New System.Drawing.Point(326, 13)
      Me.tbNombre.Name = "tbNombre"
      Me.tbNombre.Size = New System.Drawing.Size(88, 20)
      Me.tbNombre.TabIndex = 20
      Me.tbNombre.Text = ""
      '
      'lbDiasV
      '
      Me.lbDiasV.Location = New System.Drawing.Point(276, 47)
      Me.lbDiasV.Name = "lbDiasV"
      Me.lbDiasV.Size = New System.Drawing.Size(147, 23)
      Me.lbDiasV.TabIndex = 21
      Me.lbDiasV.Text = "Dias vividos"
      Me.lbDiasV.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
      '
      'Form1
      '
      Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
      Me.ClientSize = New System.Drawing.Size(442, 366)
      Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.lbDiasV, Me.tbNombre, Me.Label2, Me.Label1, Me.FechaN, Me.DataC, Me.BoxSabi, Me.BoxDomini, Me.BoxPasion, Me.BoxAutoC, Me.BoxEsp, Me.BoxEst, Me.BoxIntu, Me.BoxFisic, Me.BoxMental, Me.BoxEmoc, Me.BioCanvas})
      Me.Name = "Form1"
      Me.Text = "Biorritmos"
      Me.ResumeLayout(False)

   End Sub

#End Region

AQUI COMIENZA EL PROGRAMA
 


   'Declaramos las variables que necesitaremos

   'PAra realizar cada ciclo precisamos de matrices de puntos
   'ciclos Primarios
   Private PuntsF(32) As Point 'Matriz de puntos para ci.Fisico
   Private PuntsM(32) As Point 'Matriz de puntos para ci.Intelectual
   Private PuntsE(32) As Point 'Matriz de puntos para ci.Emocional

   'ciclos Secundarios
   Private PuntsP(32) As Point 'Matriz de puntos para ci.Pasional
   Private PuntsD(32) As Point 'Matriz de puntos para ci.Dominio
   Private PuntsS(32) As Point 'Matriz de puntos para ci.Sabiduria

   'ciclos Superiores
   Private PuntsIn(32) As Point 'Matriz de puntos para ci.Intuitivo
   Private PuntsEst(32) As Point 'Matriz de puntos para ci.Estetico
   Private PuntsAu(32) As Point 'Matriz de puntos para ci.Autoconsciencia
   Private PuntsEsp(32) As Point 'Matriz de puntos para ci.Espiritual

   Private b As Integer
   Private DiaN, MesN, AnyN As Integer
   Private DataCalc As Date

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

   End Sub

   Private Sub PreparaGrafico(ByVal Grafic As System.Drawing.Graphics)
      On Error GoTo CtrlErrores
      'Variables para el lapiz i relleno que utilizaremos
      Dim Lapiz As System.Drawing.Pen
      Dim rectBrush As System.Drawing.Brush

      Lapiz = Nothing
      rectBrush = Nothing

      '"Pas" es el resultado de dividir el area del grafico por 31 partes, simulando 31 dias

      Dim Pas As Integer = BioCanvas.Width / 31
      Dim Meitat As Integer = BioCanvas.Height / 2 'Dividimos la anchura por la mitad
      Dim Rect As Rectangle 'Definim un area rectangular
      Rect = ClientRectangle 'Area del client

      Rect.Inflate(0, -BioCanvas.Height / 2) 'L'establim a la mesura del Picturebox contenidor

      Grafic.Clear(System.Drawing.Color.White) 'Esbablecemos un color de fondo

      'Para un ciclo de 31 dias 
      'Recordemos que hemos dividido el grafico en 31 partes
      Dim i As Integer

      For i = 0 To 31
         Dim dataAra As Boolean = (i + 1) = DataC.Value.Day

         If dataAra = True Then
            If Not tbNombre.Text = Nothing Then
               'Lapiz negro y color gris de fondo
               Lapiz = New System.Drawing.Pen(System.Drawing.Color.Black, 1)
               rectBrush = New SolidBrush(Color.LightGray) 'Farçiment

               Grafic.FillRectangle(rectBrush, i * Pas, 0, Pas, BioCanvas.Height)
               Grafic.DrawRectangle(Lapiz, i * Pas, 0, Pas, BioCanvas.Height)
            End If
         Else 'Si no es la fecha
            Lapiz = New System.Drawing.Pen(System.Drawing.Color.Gray, 1)

         End If

         Grafic.DrawLine(Lapiz, i * Pas, 0, i * Pas, BioCanvas.Height)
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Gray, 1)
         Grafic.DrawLine(Lapiz, 0, Meitat, BioCanvas.Width, Meitat)

      Next

      Exit Sub

CtrlErrores:
      Select Case Err.Number
         Case Else
            MsgBox(Err.Number & Err.Description & Err.Erl)
      End Select
   End Sub

#Region "DibCiclo"
   'Cálculo de cada Ciclo
   Private Function BioF(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 23) * 2 * PI / 23))
   End Function

   Private Function BioE(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 28) * 2 * PI / 28))
   End Function

   Private Function BioI(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 33) * 2 * PI / 33))
   End Function

   Private Function BioIntu(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 38) * 2 * PI / 38))
   End Function

   Private Function BioEst(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 43) * 2 * PI / 43))
   End Function

   Private Function BioAutoCons(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 48) * 2 * PI / 48))
   End Function

   Private Function BioEsp(ByVal u As Integer) As Integer
      Return (BioCanvas.Height / 2.6 * Sin((u Mod 53) * 2 * PI / 53))
   End Function

   Private Sub BioCanvas_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles BioCanvas.Paint
      DibujaBios(e.Graphics)
   End Sub

   Private Sub DibujaBios(ByVal Grafic As System.Drawing.Graphics)
      On Error GoTo CtrlErrores

      Dim Lapiz As System.Drawing.Pen = Nothing

      Grafic.Clear(Color.White) 'Definim Color Blanc per al fons

      PreparaGrafico(Grafic) 'Procediment que prepara el grafic, dibuja la base


      '----------'Dibujo Ciclos Primarios----------------------------------------

      'dibuja el Ciclo "Fisic"
      If BoxFisic.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Red, 1)
         Grafic.DrawCurve(Lapiz, PuntsF)
      End If

      'dibuja el Ciclo Mental
      If BoxMental.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Green, 1)
         Grafic.DrawCurve(Lapiz, PuntsM)
      End If

      'dibuja el Ciclo Emocional
      If BoxEmoc.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Blue, 1)
         Grafic.DrawCurve(Lapiz, PuntsE)
      End If
      '----------'Dibuix ciclos Secundaris---------------------------------------
      'Ciclo de la Pasio
      If BoxPasion.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Salmon, 1)
         Grafic.DrawCurve(Lapiz, PuntsP)
      End If

      'Ciclo del Domini
      If BoxDomini.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.CornflowerBlue, 1)
         Grafic.DrawCurve(Lapiz, PuntsD)
      End If

      'Ciclo de la sabiduria
      If BoxDomini.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Khaki, 1)
         Grafic.DrawCurve(Lapiz, PuntsS)
      End If

      '----------'Dibuix ciclos Superiores--------------------------------------

      'dibuja el Ciclo Intuitivo
      If BoxIntu.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.DarkRed, 1)
         Grafic.DrawCurve(Lapiz, PuntsIn)
      End If

      'dibuja el Ciclo Estetico
      If BoxEst.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Aqua, 1)
         Grafic.DrawCurve(Lapiz, PuntsEst)
      End If

      'dibuja el Ciclo AutoConsciencia
      If BoxAutoC.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Yellow, 1)
         Grafic.DrawCurve(Lapiz, PuntsAu)
      End If

      'dibuja el Ciclo Espiritual
      If BoxEsp.Checked Then
         Lapiz = New System.Drawing.Pen(System.Drawing.Color.Yellow, 1)
         Grafic.DrawCurve(Lapiz, PuntsEsp)
      End If

      Exit Sub
CtrlErrores:
      Select Case Err.Number
         Case Else
            MsgBox(Err.Number & Err.Description & Err.Erl())
      End Select
   End Sub
#End Region

   Private Sub Recalcular(ByVal sender As Object, ByVal e As System.EventArgs)
      'Procedimiento que recalcula los puntos

      On Error GoTo CtrlErrores
      Dim I As Integer 'Contador
      Dim bbb As Integer 'El numero de dies viscuts
      Dim Bn As Integer
      Dim Pas As Integer = BioCanvas.Width / 31

      'Obtenemos el numero de dias vividos (pequeña "chorrada" pero que sirve para entender como obtenemos el valor "BBB" que es el que precisamos para el calculo

      Bn = Dn(DataC.Value.Year, DataC.Value.Month, DataC.Value.Day) - Dn(FechaN.Value.Year, FechaN.Value.Month, FechaN.Value.Day)
      lbDiasV.Text = Bn & " Dias vividos"
      bbb = Dn(DataC.Value.Year, DataC.Value.Month, 1) - Dn(AnyN, MesN, DiaN)

      For I = 0 To 32
         'Para la coordenada Horizontal (X) , vamos avanzando un "Pas"

         PuntsM(I).X = (I * Pas)
         PuntsE(I).X = PuntsM(I).X
         PuntsF(I).X = PuntsE(I).X
         PuntsIn(I).X = PuntsF(I).X
         PuntsEst(I).X = PuntsIn(I).X
         PuntsAu(I).X = PuntsEst(I).X
         PuntsEsp(I).X = PuntsAu(I).X
         PuntsP(I).X = PuntsEsp(I).X
         PuntsD(I).X = PuntsP(I).X
         PuntsS(I).X = PuntsD(I).X

         'ciclos Primarios
         PuntsF(I).Y = Int(BioCanvas.Height / 2) - (BioF(bbb))
         PuntsE(I).Y = Int(BioCanvas.Height / 2) - (BioE(bbb))
         PuntsM(I).Y = Int(BioCanvas.Height / 2) - (BioI(bbb))

         'ciclos Secondarios
         PuntsP(I).Y = (PuntsF(I).Y + PuntsE(I).Y) / 2
         PuntsD(I).Y = (PuntsM(I).Y + PuntsF(I).Y) / 2
         PuntsS(I).Y = (PuntsE(I).Y + PuntsM(I).Y) / 2

         'ciclos superiores
         PuntsIn(I).Y = Int(BioCanvas.Height / 2) - (BioIntu(bbb))
         PuntsEst(I).Y = Int(BioCanvas.Height / 2) - (BioEst(bbb))
         PuntsAu(I).Y = Int(BioCanvas.Height / 2) - (BioAutoCons(bbb))
         PuntsEsp(I).Y = Int(BioCanvas.Height / 2) - (BioEsp(bbb))

         bbb = bbb + 1 'Incrementamos en 1 los dias
      Next I

      DibujaBios(BioCanvas.CreateGraphics)
      Exit Sub

CtrlErrores:
      Select Case Err.Number
         Case Else
            MsgBox(Err.Number & Err.Description & Err.Erl())
      End Select
   End Sub

   Private Function Dn(ByVal Any As Integer, ByVal Mes As Integer, ByVal Dia As Integer) As Integer
      'Con esta funcion, convertimos una fecha cualquiera en un valor "integer"
      Dim s, p As Integer
      s = Int((22 - Mes) / 10)
      p = Int((s * 12 + Mes - 14) * 30.59 + Dia)
      Dn = Int((Any - 1899 - s) * 365.25 + p)
   End Function


   Private Sub BoxFisic_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BoxFisic.CheckedChanged, BoxMental.CheckedChanged, BoxEmoc.CheckedChanged, BoxIntu.CheckedChanged, BoxAutoC.CheckedChanged, BoxEst.CheckedChanged, BoxEsp.CheckedChanged, BoxPasion.CheckedChanged, BoxSabi.CheckedChanged, BoxDomini.CheckedChanged
      'Maravilla del VB.NET, todos los controles en los que repetimos el mismo evento los podemos agrupar

      'Cada vez que el estado "chekeado/NoChekeado" canvie, recalculamos todo
      Recalcular(sender, e)
   End Sub

   Private Sub DataC_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataC.TextChanged
      'Cade vez que variemos la fecha, se recalcularàn los ciclos
      Recalcular(sender, e)
   End Sub

   Private Sub FechaN_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles FechaN.Validated
      DiaN = FechaN.Value.Day
      MesN = FechaN.Value.Month
      AnyN = FechaN.Value.Year
   End Sub

   Private Sub FechaN_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles FechaN.KeyPress

      'Si presionamos intro se producira la validacion de la fecha
      'El foco pasa el control al nombre
      If e.KeyChar = ChrW(13) Then
         tbNombre.Focus()
      End If
      If e.KeyChar = ChrW(27) Then
         Me.Close() 'Se cierra el formulario
      End If
   End Sub


   Private Sub tbNombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbNombre.KeyPress
      'Controlamos la entrada de teclas
      Select Case e.KeyChar
         Case ChrW(27)
            FechaN.Focus()
         Case ChrW(13) 'Hemos pulsado Intro
            tbNombre_Validated(sender, e) 'Validamos el contenido 
         Case "a" To "z" 'Solo permitimos entrar letras
         Case "ñ" 'La Ñ aparte (maravilla de nuestro idioma que salta el codigo ASCII)
         Case Else 'Cualquier otra tecla no la reconocemos
            e.Handled = True
      End Select
   End Sub

   Private Sub tbNombre_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbNombre.Validated
      'Al validar el nombre 
      tbNombre.Text = UCase(tbNombre.Text) 'Lo convertimos a mayusculas ( parece que queda mas bonito
      'Permitimos que se dibjuen los ciclos primarios ( pa que se vea algo)
      BoxFisic.Checked = True
      BoxMental.Checked = True
      BoxEmoc.Checked = True
      Recalcular(sender, e)
      'el resto lo dejamos a eleccion del usuario que vaya seleccionando ciclos segun su gusto

   End Sub

End Class 

¿ Os atreveriais a comparar los biorritmos de dos personas ?. Una pista : fijaros en como se elaboran los ciclos Pasion, Sabiduria, y maestria (ciclos secundarios).

Espero que os sea útil

Jordi

 

ir al índice

Fichero con el código de ejemplo (BioCodFuente.zip - 371 KB)