Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#7631
Actualizada la colección de snippets con un total de 544 Snippets...
...Casi nada!!

http://elektrostudios.tk/Snippets.zip

En la primera página de este hilo tienen un índice de todos los snippets que contiene el pack.

PD: Algunos de los antiguos snippets (no todos) han sido mejorados y/o simplificados.

Saludos!
#7632
Quiero compartir mi plantilla de aplicación de consola por defecto con menú,
para importar la plantilla a VisualStudio símplemente deben copiar el archivo ZIP al directorio "...Mis Documentos\Visual Studio\Templates\ProjectTemplates\"  (o donde lo hayan establecido en la configuración de VisualStudio).

Esto es lo que le añadí:

· Menú inteligente, se mueve con las flechas de dirección del teclado, así como poder elegir una opción según el Identificador del item (1-9, A-Z).
· Sección de ayuda. (Logo, sintaxis, título)
· Método para escribir texto coloreado.
· Método para ocultar la consola.
· Método para lanzar un error conocido.

Todo documentado y en no muchas lineas de código.

Descarga: http://elektrostudios.tk/ElektroStudios%20Console%20Menu%20Application.zip




Una imagen:





Este es el código principal, junto a 2 Classes adicionales que se encuentran dentro de la plantilla.

Código (vbnet) [Seleccionar]
Module Main

#Region " Variables "

   ''' <summary>
   ''' The chooseable menu items.
   ''' </summary>
   Private ReadOnly MenuItems() As String =
       {
        "[1] One",
        "[2] Two",
        "[3] Three",
        "[4] Four",
        "[H] Help",
        "[X] Exit"
       }

   ''' <summary>
   ''' Indicates the selected menu item.
   ''' </summary>
   Private CurrentMenuItem As Short = 0

   ''' <summary>
   ''' The object to read in a pressed key.
   ''' </summary>
   Private key As ConsoleKeyInfo = Nothing

   ''' <summary>
   ''' Indicates wether the user pressed a valid key.
   ''' </summary>
   Private ValidKeyIsPressed As Boolean = False

   ''' <summary>
   ''' To manage known errors.
   ''' </summary>
   Private ReadOnly KnownErrors As New Dictionary(Of Integer, String) From
   {
       {1, "Wrong parameter"},
       {2, "Parameter not specified"},
       {9999, "Unknown Error"}
   }

#End Region

#Region " Main Procedure "

   ''' <summary>
   ''' The main procedure of this application.
   ''' </summary>
   Public Sub Main()
       Console.Title = HelpSection.Title ' Set the Console Title.
       ShowMenu() ' Display the console menu.
       DoSomething()
       Environment.Exit(0) ' Exit succesfully.
   End Sub

#End Region

#Region " Methods "

   ''' <summary>
   ''' Displays the console menu.
   ''' </summary>
   Private Sub ShowMenu()

       ' Wait for a valid key.
       Do Until ValidKeyIsPressed

           ' Clear the screen.
           Console.Clear()

           ' Print the application Logotype.
           Write_Colored_Text(HelpSection.Logo, True, ConsoleColor.Green) ' Print the Logo.

           ' Print a simple help text.
           Write_Colored_Text("[+] Choose an option:", True, ConsoleColor.White)
           Console.WriteLine()

           ' Loop through all of the menu items to print them.
           For Each MenuItem As String In MenuItems

               If MenuItem = MenuItems.ElementAt(CurrentMenuItem) Then
                   Write_Colored_Text(String.Format(" -> {0}", MenuItem), True, ConsoleColor.Green)
               Else
                   Write_Colored_Text(MenuItem, True, ConsoleColor.Gray)
               End If

           Next MenuItem

           ' Waits until the user presses a key.
           key = Console.ReadKey(True)

           ' Process the pressed key.
           Select Case key.Key

               Case Keys.Down ' If the key the user pressed is a "DownArrow", the current menu item will deacrease.
                   CurrentMenuItem += 1
                   If CurrentMenuItem > MenuItems.Length - 1 Then
                       CurrentMenuItem = 0
                   End If

               Case Keys.Up ' If the key the user pressed is a "UpArrow", the current menu item will increase.
                   CurrentMenuItem -= 1
                   If CurrentMenuItem < 0 Then
                       CurrentMenuItem = CShort(MenuItems.Length - 1)
                   End If

               Case Keys.Enter ' Enter Key (Select current menu item).
                   ValidKeyIsPressed = True

               Case Keys.D1 To Keys.D4 ' A numeric key is pressed between 1-4.
                   CurrentMenuItem = key.Key.ToString.Substring(1) - 1
                   ValidKeyIsPressed = True

               Case Keys.H ' H Key (Print Help).
                   PrintHelp()
                   ValidKeyIsPressed = True

               Case Keys.X ' X Key (Exit from application).
                   Environment.Exit(0)

           End Select

       Loop

   End Sub

   ''' <summary>
   ''' Do something.
   ''' </summary>
   Private Sub DoSomething()
       Console.WriteLine()
       Write_Colored_Text("User Pressed Key: " & key.Key.ToString, True, ConsoleColor.Red, ConsoleColor.White)
       Write_Colored_Text("Selected Option : " & MenuItems(CurrentMenuItem), True, ConsoleColor.Red, ConsoleColor.White)
       Write_Colored_Text("Selected Index  : " & CurrentMenuItem.ToString, True, ConsoleColor.Red, ConsoleColor.White)
       Console.ReadLine()
   End Sub

#End Region

#Region " Miscellaneous Methods "

   ''' <summary>
   ''' Writes colored text on the Console.
   ''' </summary>
   ''' <param name="Text">Indicates the text to write.</param>
   ''' <param name="AddNewLine">Adds an empty line at the end of the text.</param>
   ''' <param name="ForeColor">Indicates the text color.</param>
   ''' <param name="BackColor">Indicates the background color.</param>
   Private Sub Write_Colored_Text(ByVal Text As String,
                                  Optional ByVal AddNewLine As Boolean = False,
                                  Optional ByVal ForeColor As ConsoleColor = Nothing,
                                  Optional ByVal BackColor As ConsoleColor = Nothing)

       Dim CurrentForegroundColor As ConsoleColor = Console.ForegroundColor
       Dim CurrentBackgroundColor As ConsoleColor = Console.BackgroundColor

       Console.ForegroundColor = If(ForeColor = Nothing, CurrentForegroundColor, ForeColor)
       Console.BackgroundColor = If(ForeColor = Nothing, CurrentBackgroundColor, BackColor)

       If AddNewLine Then
           Console.WriteLine(Text)
       Else
           Console.Write(Text)
       End If

       Console.ForegroundColor = CurrentForegroundColor
       Console.BackgroundColor = CurrentBackgroundColor

   End Sub

   ''' <summary>
   ''' Set the window state of the console.
   ''' </summary>
   ''' <param name="WindowState">Indicates the new state of the console window.</param>
   Public Function SetWindow(ByVal WindowState As ConsoleWindowState.WindowState) As Boolean
       Return ConsoleWindowState.SetWindowState(WindowState)
   End Function

   ''' <summary>
   ''' Print the Help section and exits from the application.
   ''' </summary>
   Private Sub PrintHelp()
       Console.WriteLine(HelpSection.Help)
       Environment.Exit(0) ' Exit succesfully.
   End Sub

   ''' <summary>
   ''' Launch a known error and exits from the application.
   ''' </summary>
   ''' <param name="ErrorID">
   ''' Indicates the known Error Identifier.
   ''' This value is also used to specify the ExitCode.
   ''' </param>
   ''' <param name="MoreInfo">Indicates additional information.</param>
   Private Sub LaunchError(ByVal ErrorID As Integer, Optional ByVal MoreInfo As String = Nothing)

       Console.WriteLine()
       Write_Colored_Text(KnownErrors(ErrorID) &
                          If(MoreInfo IsNot Nothing, ": " & MoreInfo, Nothing),
                          True, ConsoleColor.White, ConsoleColor.DarkRed)

       Environment.Exit(ErrorID) ' Exit with error exitcode.

   End Sub

#End Region

End Module


Saludos.
#7633
Quiero compartir mi plantilla de aplicación de consola por defecto para parsear argumentos,
para importar la plantilla a VisualStudio símplemente deben copiar el archivo ZIP al directorio "...Mis Documentos\Visual Studio\Templates\ProjectTemplates\"  (o donde lo hayan establecido en la configuración de VisualStudio).

Esto es lo que le añadí:

· Sección de ayuda. (Logo, sintaxis, título)
· Método para escribir texto coloreado.
· Método para ocultar la consola.
· Método para lanzar un error conocido.
· Método para establecer los argumentos de la aplicación. (Ojo, esto es con fines de debug, no usarlo en el Release, ya que el regex no es perfecto.)
· Método para procesar argumentos.
· Método para comprobar si los argumentos están vacios.
· Método para unir los argumentos en un String.

Todo documentado y en no muchas lineas de código.

Descarga: http://elektrostudios.tk/ElektroStudios%20Console%20Application.zip




Una imagen:





Este es el código principal, junto a 2 Classes adicionales que se encuentran dentro de la plantilla.

Código (vbnet) [Seleccionar]
Module Main

#Region " Variables "

   ''' <summary>
   ''' Here will be stored the commandline arguments for this application.
   ''' If DebugArguments is nothing then the normal arguments are used,
   ''' Otherwise, the custom debug arguments are used.
   ''' </summary>
   Private Arguments As IEnumerable(Of String) =
       Set_CommandLine_Arguments(<a><![CDATA[/Switch1=Value1 /Switch2="Value2"]]></a>.Value)

   ''' <summary>
   ''' Something.
   ''' </summary>
   Private Something As String = Nothing

   ''' <summary>
   ''' To manage known errors.
   ''' </summary>
   Private ReadOnly KnownErrors As New Dictionary(Of Integer, String) From
   {
       {1, "Wrong parameter"},
       {2, "Parameter not specified"},
       {9999, "Unknown Error"}
   }

#End Region

#Region " DEBUG CommandLine Arguments "

   ''' <summary>
   ''' Set the commandline arguments of this application for testing purposes.
   ''' </summary>
   Public Function Set_CommandLine_Arguments(Optional ByVal DebugArguments As String = Nothing) As IEnumerable(Of String)

#If DEBUG Then

   ' Código eliminado porque el foro tiene un bug al parsear los caracteres...

   End Function

#End Region

#Region " Main Procedure "

   ''' <summary>
   ''' The main procedure of this application.
   ''' </summary>
   Public Sub Main()
       Console.Title = HelpSection.Title ' Set the Console Title.
       Write_Colored_Text(HelpSection.Logo, True, ConsoleColor.Green) ' Print the Logo.
       Write_Colored_Text("Arguments: " & Join_Arguments(Arguments), True, ConsoleColor.DarkGray) ' Print the Arguments.
       Parse_Arguments() ' Processes the arguments passed to the application.
       DoSomething() ' Do Something and wait.
       Environment.Exit(0) ' Exit succesfully.
   End Sub

#End Region

#Region " Methods "

   ''' <summary>
   ''' Parses the Arguments passed to this application.
   ''' </summary>
   Private Sub Parse_Arguments()

       ' Arguments Are Empty?.
       If Arguments_Are_Empty(Arguments) Then
           PrintHelp()
       End If

       ' Parse arguments.
       For Each Argument As String In Arguments

           Select Case True

               Case Argument.StartsWith("/Switch1=", StringComparison.InvariantCultureIgnoreCase)
                   ' Something = Argument.Substring(Argument.IndexOf("=") + 1)

           End Select

       Next Argument

       If Something Is Nothing Then
           LaunchError(1, "/Switch1")
       End If

   End Sub

   ''' <summary>
   ''' Do something and wait.
   ''' </summary>
   Private Sub DoSomething()

       Do Until Something = "Something Else"
           Application.DoEvents()
       Loop

   End Sub

#End Region

#Region " Miscellaneous Methods "

   ''' <summary>
   ''' Check if the arguments are empty.
   ''' </summary>
   ''' <param name="DebugArguments">Indicates a custom arguments to check.</param>
   Private Function Arguments_Are_Empty(Optional ByVal DebugArguments As IEnumerable(Of String) = Nothing) As Boolean

       Return Not Convert.ToBoolean(If(DebugArguments IsNot Nothing,
                                       DebugArguments.Count,
                                       Environment.GetCommandLineArgs.Skip(1).Count))

   End Function

   ''' <summary>
   ''' Joins the Arguments to return a single String.
   ''' </summary>
   ''' <param name="DebugArguments">Indicates a custom arguments to join.</param>
   Private Function Join_Arguments(Optional ByVal DebugArguments As IEnumerable(Of String) = Nothing) As String

       Return String.Join(Convert.ToChar(Keys.Space),
                          If(DebugArguments IsNot Nothing,
                             DebugArguments,
                             Environment.GetCommandLineArgs.Skip(1)))

   End Function

   ''' <summary>
   ''' Writes colored text on the Console.
   ''' </summary>
   ''' <param name="Text">Indicates the text to write.</param>
   ''' <param name="AddNewLine">Adds an empty line at the end of the text.</param>
   ''' <param name="ForeColor">Indicates the text color.</param>
   ''' <param name="BackColor">Indicates the background color.</param>
   Private Sub Write_Colored_Text(ByVal Text As String,
                                  Optional ByVal AddNewLine As Boolean = False,
                                  Optional ByVal ForeColor As ConsoleColor = Nothing,
                                  Optional ByVal BackColor As ConsoleColor = Nothing)

       Console.ForegroundColor = If(ForeColor = Nothing, Console.ForegroundColor, ForeColor)
       Console.BackgroundColor = If(ForeColor = Nothing, Console.BackgroundColor, BackColor)

       If AddNewLine Then
           Console.WriteLine(Text)
       Else
           Console.Write(Text)
       End If

       Console.ForegroundColor = If(ForeColor = Nothing, Console.ForegroundColor, ForeColor)
       Console.BackgroundColor = If(ForeColor = Nothing, Console.BackgroundColor, BackColor)

   End Sub

   ''' <summary>
   ''' Set the window state of the console.
   ''' </summary>
   ''' <param name="WindowState">Indicates the new state of the console window.</param>
   Public Function SetWindow(ByVal WindowState As ConsoleWindowState.WindowState) As Boolean
       Return ConsoleWindowState.SetWindowState(WindowState)
   End Function

   ''' <summary>
   ''' Print the Help section and exits from the application.
   ''' </summary>
   Private Sub PrintHelp()
       Console.WriteLine(HelpSection.Help)
       Environment.Exit(0) ' Exit succesfully.
   End Sub

   ''' <summary>
   ''' Launch a known error and exits from the application.
   ''' </summary>
   ''' <param name="ErrorID">
   ''' Indicates the known Error Identifier.
   ''' This value is also used to specify the ExitCode.
   ''' </param>
   ''' <param name="MoreInfo">Indicates additional information.</param>
   Private Sub LaunchError(ByVal ErrorID As Integer, Optional ByVal MoreInfo As String = Nothing)

       Console.WriteLine()
       Write_Colored_Text(KnownErrors(ErrorID) &
                          If(MoreInfo IsNot Nothing, ": " & MoreInfo, Nothing),
                          True, ConsoleColor.White, ConsoleColor.DarkRed)

       Environment.Exit(ErrorID) ' Exit with error exitcode.

   End Sub

#End Region

#Region " Event Handlers "

   ' Add here your EventHandlers.

#End Region

End Module


Saludos.
#7634
Claro q no hace nada, fíjate en el método sumar:

Citar
Código (vbnet) [Seleccionar]
Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs)

Originálmente era:
Citar
Código (vbnet) [Seleccionar]
Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Le quitaste la claúsula Handles

EDITO:
y aquí lo mismo:
Citar
Código (vbnet) [Seleccionar]
Private Sub FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

...Handles mybase.load

Revisa todos los controladores de eventos de tú código y corrígelos

Saludos!
#7635
Cita de: adan-2994 en  4 Diciembre 2013, 20:11 PMEmpece guardándolos en un archivo de texto, pero es muy ineficiente.

¿Que significado le das a "es muy ineficiente"?,
guardar una BD en un archivo de texto plano no tiene porque ser ineficiente, depende de si la manera en que lo haces es eficiente o no, por poner ejemplo un CSV (Comma-separated values), .NET dispone de métodos para parsear este tipo de archivos delimitados usando la Class TextFieldParser -> http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser%28v=vs.110%29.aspx

Si que es cierto que visúalmente puede quedar fea la información guardada, pero ineficiente... yo pienso que no.

Tampoco especificas cual es la cantidad de registros, puede que sean demasiado pocos como para perder el tiempo ponerse a hacer una BD en Excel o MySQL, o puede que sean demasiados como para guardar la información en un archivo de texto delimitado.

No me apasiona la idea de depender de otro producto de Microsoft y además aprender su manejo y estructura para guardar/leer X información, yo te recomendaría un simple archivo XML, que bien eficiente es, pero bueno, para gustos colores algunos trabajan más eficázmente con otro tipo de estructuras, no he manejado Excel pero aqui tienes claros ejemplos de como manejar Excel en .NET:

-> A Complete Excel Programming Sample
-> Read and Write Excel File Dynamically
-> C#: Query Excel and .CSV Files Using LinqToExcel

Saludos!
#7636
símplemente elimina lo que te dije, todo esto:

Citar
Código (vbnet) [Seleccionar]

      Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3) : Array.Sort(Result4) : Array.Sort(Result5) : Array.Sort(Result6)  ' Ordeno los Items
      ' ----------------------------------------------------------------------------
      ' aca que no salgan repetidos en las lineas -------------------------------------
      ' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
      Dim Results As IEnumerable(Of Integer) =
          Result1.Concat(Result2).Concat(Result3).Concat(Result4)

      For X As Integer = 0 To Results.Count - 1



          TextBoxCount += 1

          Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

              Case False ' El número no está repetido en ninguna "linea"
                  ' Así que colocamos el número en el Textbox
                  TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

              Case True ' El número está repetido en alguna de las "lineas"
                  ' Así que haces lo que quieras con el Número/Textbox
                  MsgBox(Results(X))
                  TextBox(TextBoxCount).Text = -1.ToString

          End Select
      Next X
      ' -----------------------------------------------------------------------

      ' aca vamos con el rango

      For Each Number As Int32 In Result1
          TextBoxCount += 1
          TextBoxes(TextBoxCount).Text = Number
      Next
      ' -----------------------------------------
      For Each Number As Int32 In Result2
          TextBoxCount += 1
          TextBoxes(TextBoxCount).Text = Number
      Next
      ' -----------------------------------------
      For Each Number As Int32 In Result3

          TextBoxCount += 1

          If Not Number > maximum Then
              TextBoxes(TextBoxCount).Text = CStr(Number)
          Else
              TextBoxes(TextBoxCount).Text = CStr(maximum)
          End If

      Next Number
      ' -----------------------------------------
      For Each Number As Int32 In Result4

          TextBoxCount += 1

          If Not Number > maximum Then
              TextBoxes(TextBoxCount).Text = CStr(Number)
          Else
              TextBoxes(TextBoxCount).Text = CStr(maximum)
          End If

      Next Number
      ' -----------------------------------------

Lo dejas así:

Código (vbnet) [Seleccionar]

       Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)
       Array.Sort(Result4) : Array.Sort(Result5) : Array.Sort(Result6)  ' Ordeno los Items

        TextBoxCount = 0 ' Reseteo el valor a cero

       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3).Concat(Result4) ' concateno arrays

       If Results.Count > TextBoxes.Count Then
           Throw New Exception("La cantidad de números es mayor que la cantidad de Textboxes")
       End If

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   Try
                       TextBoxes(TextBoxCount).Text = CStr(Results(X))
                   Catch ex As Exception
                       Throw New Exception(ex.Message & ex.StackTrace)
                   End Try

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que escribimos el número "máximo" en el textbox
                   TextBoxes(TextBoxCount).Text = -CStr(maximum)

           End Select

       Next X


Si te da error, muestra el detalle del error.

Saludos!
#7637
Cito mis palabras:

Cita de: EleKtro H@cker en  3 Diciembre 2013, 17:58 PMPodrías hacer algo así, desde la linea del Array.Sort, esto reemplazaría a los 3 búcles que usas.

Cito tú último código:

Cita de: luis456 en  4 Diciembre 2013, 18:37 PM

Código (vbnet) [Seleccionar]
Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)  ' Ordeno los Items

--------------------------ACA LO PUSE
' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3)

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que haces lo que quieras con el Número/Textbox
                   MsgBox(Results(X))
                   TextBox(TextBoxCount).Text = -1.ToString

           End Select

       Next X


----------------------------------------------------------------------
       ' funcion
       For Each Number As Int32 In Result1
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result2
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result3
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next


¿Que falla ahí?, que sigues utilizando esos 3 For each, elimínalos.




EDITO:

Sobre la misteriosa incoherente función, no tengo nada que añadir, solo quiero hacer referencia a estas líneas de comentario con la intención de aclarar (a los que no lo sepan) que una función no necesita usar explícitamente la declaración Return para devolver un valor, aunque, porsupuesto esto no está bien visto, solo lo comento:

Cita de: .:Weeds:. en  4 Diciembre 2013, 18:51 PM
Código (vbnet) [Seleccionar]
  'Una funcion devuelve un valor, osea tiene un return
  'Esta funcion no tiene un return

Ejemplo:
Código (vbnet) [Seleccionar]
MsgBox(Test("Hello World")) ' Result: dlroW olleH

Private Function Test(ByVal str As String) As String
     Test = String.Join(String.Empty, str.Reverse)
End Function





Cita de: luis456 en  4 Diciembre 2013, 19:05 PM
TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

"""""" Variable de objeto o de bloque With no establecida.  ????????'

postea la Class entera para examinarla, porque en el anterior código el bloque del método "Sumar" lo dejas abierto, y además adentro del bloque añades una función (¿?), no creo que el código original sea tal y como lo mostraste xD.

Saludos
#7638
Foro Libre / Re: Ayer cumplí años!
4 Diciembre 2013, 12:26 PM
Sin comentarios xD

FELICIDADES xD
#7639
Foro Libre / Re: Mi experiencia con el Bullying
3 Diciembre 2013, 23:48 PM
Es dificil ponerse en la piel de esos niños (y no tan niños), habrá muchos aspectos a tener en cuenta, pero digo yo, que si a un chaval le hacen bullying, es porque no se defiende, está un poco alelao y debe espabilar, que la vida es dura,
pienso yo que en el momento en que ese chaval suelte un par de hostias ...los "bulls" se lo volverian a pensar dos veces antes de molestarle.

No importa si ellos son más fuertes y altos que tú, tú juegas con ventaja porque ellos no se esperan que te vayas a defender, intenten quitarse ese miedo y cobardía de encima, háganse valientes por una vez y en el momento menos esperado denle una buena hostia en el ojo o en las partes bajas, eso sirve para cualquiera persona no importa su estado fisico no importa lo fuerte que sea, lo digo por experiencia, no tengan miedo, después del primer puño quizás deban pegar otro, pero esa gente son pura cobardía y no se vengarán de ustedes, simplemente iran a molestar a otro ...otro que sea más facil de molestar, otro que sepan que no se va a defender, otro que no seas tú.

¡ DEFIÉNDANSE !, háganlo y la vida les irá mejor.

Saludos!
#7640
Cita de: TMarmol en  3 Diciembre 2013, 20:33 PMTe mencionare en el "About"  ;D
xD

De nada, para eso estamos,
me alegro de que lo consiguieras.

PD: le hice una última modificación al código que te propuse en el comentario de arriba, míralo si lo quieres testear.

Saludos