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

#3741
Para hacer combinaciones permutaciones de más dígitos, es necesario cambiar la lógica de esa query Linq-to-Objects por completo.

Si lo que quieres es obtener todas las combinaciones posibles de los valores contenidos en un array, y de longitud determinada, entonces esto es una solución mejor:

( espera, la estoy buscando en mi API ElektroKit)
#3742
Creo que me he pasado y he escrito un texto demasiado largo...

Esto es solo para explicarte el funcionamiento del método String.Format(), si no estás interesado ignora este post.




1º:
La función String.Format().

Sirve para asignar un formato específico a una cadena de texto, y devolver la cadena formateada.

Los {n} representan tres cosas, de la tercera ya hablaremos, lo primero que representa es el índice de los argumentos que se especifican a la derecha del formato de la cadena de texto (String.Format("Formato", arg0, arg1, arg2, etc...)), y la posición donde se debe insertar el valor de ese objeto en el formato String.Format("{insertar arg0 aquí} Hola Mundo! {o insertar arg0 aquí}", arg0)).

En este ejemplo
Código (vb) [Seleccionar]
String.Format("C:\{0}.{1}", "Archivo", "txt")

{0} = El primer objeto especificado en el array de argumentos ("archivo")
{1} = El segundo objeto especificado en el array de argumentos ("txt")

Es decir, que este formato:
"C:\{0}.{1}"

Devolverá esta cadena de texto:
"C:\Archivo.txt"

Es decir, también, que el siguiente formato seguiría devolviendo el mismo string que antes ("C:\Archivo.txt"), puesto que el formato sigue siendo el mismo a pesar de haber añadido un objeto adicional en el array de argumentos:
Código (vb) [Seleccionar]
String.Format("C:\{0}.{1}", "Archivo", "txt", DateTime.Now())

Para tener en cuenta el o los objetos adicionales que hemos añadido en el array de argumentos, debemos referenciarlos en el formato, especificando sus índices {n}:
Código (vb) [Seleccionar]
String.Format("C:\{0}.{1} {2}", "Archivo", "txt", DateTime.Now())

Eso nos devolvería lo mismo que si concatenasemos el string de esta manera:
Código (vbnet) [Seleccionar]
"C:\" & "Archivo" & "." & "txt" & " " & DateTime.Now().ToString()
(que cosa más fea)

Es muy sencillo, una vez que se entiende, no tiene misterio, solo son posiciones e índices...

Puedes repetir los índices {n} en el formato cuantas veces quieras, para insertar ese valor en distintas posiciones del string.

Por ejemplo este formato:
Código (vbnet) [Seleccionar]
String.Format("C:\{0}\{0}\{0}\{1}.{2}", "Carpeta", "Archivo", "txt", DateTime.Now())

Produciría el string:
C:\Carpeta\Carpeta\Carpeta\Archivo.txt





El formato de los valores.

A los valores de los argumentos también les puedes asignar un formato específico, dentro del formato del string, esto es a lo que me refería con esa tercera cosa que representan los {n}.

Lo mejor es que leas este artículo de MSDN sobre los formatos de los valores:
Custom Numeric Format Strings
( no están todos los formatos que se pueden utilizar para formatear un valor, pero con eso ya tienes suficiente para empezar)

Para especificar un formato de valor, se hace de la siguiente manera {n:FORMATO} donde "FORMATO" sería el formato que le queramos dar, entre los formatos disponibles.

En este ejemplo uso el formato "Zero placeholder" (que puedes leer en el enlace de MSDN):
Código (vbnet) [Seleccionar]
String.Format("Valor: {0:00}", 1)

Eso lo que hace es rellenar el espacio vacío a la izquierda con un "0" en caso de que el valor del argumento ("1") no ocupe ese espacio, por lo que ese formato devolverá este string:
Valor: 01

Es practicamente lo mismo que hacerle un padding a un string:
Código (vbnet) [Seleccionar]
Dim str As String = "1".PadLeft(2, "0"c) ' 01

Te he explicado ese formato por que es el que quieres utilizar, pero hay muchísimos más.
#3743
¿Por "navegador" te refieres a un navegador externo, o al control WebBrowser?

En el segundo caso, puedes acceder al documento antes de que sea renderizado en la instancia del navegador hospedado, para realizar las modificaciones que quieras hacer.

Un ejemplo corto:
Código (vbnet) [Seleccionar]
Private Sub WebBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) _
Handles WebBrowser1.Navigated

   Dim doc As HtmlDocument = DirectCast(sender, WebBrowser).Document
   doc.GetElementById("id").InnerHtml = "value"

End Sub


También puedes inyectar código si te resulta mejor, etc.

Si se trata de un navegador externo, me parece una locura reinventar la rueda, pues ya existen muchos plugins profesionales que hacen exactamente eso!, como por ejemplo Greasemonkey, y lo suyo sería trabajarlo en los lenguajes soportados para el desarrollo de plugins e interoperabilidad con los eventos del navegador en cuestión para hacerlo realmente bien, en lugar de tener que hechar mano, en .Net, de metodologías más tediosas o complicadas como UI Automation para interactuar con las ventanas, eventos, texto, y etc del proceso/navegador externo.

Saludos
#3744
.NET (C#, VB.NET, ASP) / Re: Timer en C#
22 Marzo 2016, 07:59 AM
Un Timer, como su propio nombre indica, es un temporizador, para detener la ejecución del thread actual durante "X" intervalo de tiempo entre cada instrucción puedes usar el método System.Threading.Thread.Sleep:

Código (csharp) [Seleccionar]
using System.Threading;

Console.WriteLine("1");
Thread.Sleep(TimeSpan.FromSeconds(3));

Console.WriteLine("2");
Thread.Sleep(TimeSpan.FromSeconds(3));

Console.WriteLine("3");
Thread.Sleep(TimeSpan.FromSeconds(3));


Aquí tienes un ejemplo asíncrono:
#3745
Bueno, tu has desarrollado la función alternativa para decodificar, y yo simplemente quiero compartir una función alternativa para codificar...

La diferencia entre esta función y la de Microsoft, es que el código de por ciento se escribe en mayúscula (un capricho que tengo, por que prefiero los valores hexadecimales en mayúscula).

Aquí tienen:
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Encodes a Url string.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <remarks>
''' For more info, see Percent-encoding rule specifications:
''' <para></para>
''' In English: <see href="http://en.wikipedia.org/wiki/Percent-encoding"/>
''' <para></para>
''' In Spanish: <see href="http://es.wikipedia.org/wiki/C%C3%B3digo_porciento"/>
''' </remarks>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Dim encoded As String = UrlEncode("http://www.website.com/page.asp?id=5&amp;test=Hello World")
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="url">
''' The Url to encode.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The resulting encoded Url.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Shared Function UrlEncode(ByVal url As String) As String

   ' HttpUtility.UrlEncode() writes the percent-code in lower-case,
   ' this is a custom method to write the percent-code in upper-case.

   Const Excluded As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!()*"

   Dim sb As New StringBuilder()
   For Each c As Char In url

       Select Case c

           Case " "c
               sb.Append("+"c)

           Case Else
               If (Excluded.Contains(c, EqualityComparer(Of Char).Default)) Then
                   sb.Append(c)

               Else
                   For Each value As Byte In Encoding.UTF8.GetBytes(c)
                       sb.AppendFormat("%{0:X2}", value)
                   Next value

               End If

       End Select

   Next c

   Return sb.ToString()

End Function


Nota: La función HttpUtility.UrlDecode() toma perfectamente los valores hexadecimales en mayúscula.

Saludos!
#3746
.NET (C#, VB.NET, ASP) / Re: Combis :(
20 Marzo 2016, 15:01 PM
Cita de: luis456 en 20 Marzo 2016, 14:23 PMProbando el codigo de elektro ahora me muestra esto (el codigo que me mostro Lekim le consegui otro uso me vino de perlas )

coleccion de numeros ( 1, 3, 4, 5, 8, 13, 34, 55, 84, 99 )

01 03
04 05
08 13
34 55
84 99

Pero jejje Yo nesecito me nuestre

01, 03
01, 04
01, 05
01, 08
01, 13
01, 34
01, 55
01, 84

Tienes razón, culpa mia, no entendí bien el problema que querías resolver al leerlo deprisa, y simplemente tomé los valores en grupos de dos en dos, que es lo que creí que querías hacer.

Entonces lo que realmente quieres hacer es esto:
Código (vbnet) [Seleccionar]
Dim intCol As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99}

Dim count As Integer
Dim pairsCol As IEnumerable(Of String) =
   From value1 As Integer In intCol
   Select String.Join(Environment.NewLine, (
                      From value2 As Integer In intCol.Skip(Interlocked.Increment(count))
                      Select String.Format("{0:00}, {1:00}", value1, value2)))

For Each pairs As String In pairsCol
   Console.WriteLine(pairs)
    Console.WriteLine("------")
Next


Resultado de ejecución:
Citar01, 03
01, 04
01, 05
01, 08
01, 13
01, 34
01, 55
01, 84
01, 99
------
03, 04
03, 05
03, 08
03, 13
03, 34
03, 55
03, 84
03, 99
------
04, 05
04, 08
04, 13
04, 34
04, 55
04, 84
04, 99
------
05, 08
05, 13
05, 34
05, 55
05, 84
05, 99
------
08, 13
08, 34
08, 55
08, 84
08, 99
------
13, 34
13, 55
13, 84
13, 99
------
34, 55
34, 84
34, 99
------
55, 84
55, 99
------
84, 99

O sino, debe ser esto otro:
Código (vbnet) [Seleccionar]
Dim intCol As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99}

Dim pairsCol As IEnumerable(Of String) =
   From value1 As Integer In intCol
   Select String.Join(Environment.NewLine, (
                      From value2 As Integer In intCol
                      Where (value2 <> value1)
                      Select String.Format("{0:00}, {1:00}", value1, value2)))

For Each pairs As String In pairsCol
   Console.WriteLine(pairs)
   Console.WriteLine("------")
Next


Resultado de ejecución:
Citar01, 03
01, 04
01, 05
01, 08
01, 13
01, 34
01, 55
01, 84
01, 99
------
03, 01
03, 04
03, 05
03, 08
03, 13
03, 34
03, 55
03, 84
03, 99
------
04, 01
04, 03
04, 05
04, 08
04, 13
04, 34
04, 55
04, 84
04, 99
------
05, 01
05, 03
05, 04
05, 08
05, 13
05, 34
05, 55
05, 84
05, 99
------
08, 01
08, 03
08, 04
08, 05
08, 13
08, 34
08, 55
08, 84
08, 99
------
13, 01
13, 03
13, 04
13, 05
13, 08
13, 34
13, 55
13, 84
13, 99
------
34, 01
34, 03
34, 04
34, 05
34, 08
34, 13
34, 55
34, 84
34, 99
------
55, 01
55, 03
55, 04
55, 05
55, 08
55, 13
55, 34
55, 84
55, 99
------
84, 01
84, 03
84, 04
84, 05
84, 08
84, 13
84, 34
84, 55
84, 99
------
99, 01
99, 03
99, 04
99, 05
99, 08
99, 13
99, 34
99, 55
99, 84
------
#3747
Añado a lo que ha explicado el compañero @El Benjo:

Ten en cuenta para el futuro, que no todas las clases permiten usar el invocador (OnPaint) del evento Paint a tu antojo, en algunas clases, como por ejemplo la class TextBox, primeramente debes activar el dibujado de usuario, de la siguiente manera:

Código (vbnet) [Seleccionar]
Public Class MyTextBox: Inherits TextBox

   Public Sub New()
       Me.SetStyle(ControlStyles.UserPaint, value:=True)
   End Sub

   Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
       MyBase.OnPaint(e)
       ' ...
   End Sub

End Class


C#:
Código (csharp) [Seleccionar]
public class MyTextBox : TextBox {

public MyTextBox() {
this.SetStyle(ControlStyles.UserPaint, value: true);
}

protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
// ...
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Saludos.
#3748
Es suficiente con que a la ventana le asignes el estilo de ventana extendido WS_EX_TOOLWINDOW, puedes hacerlo mediante la API de Windows con las funciones SetWindowLong o SetWindowLongPtr dependiendo de la arquitectura, o con la propiedad FormBorderStyle del Form:

Me.FormBorderStyle = FixedToolWindow

Esto conlleva unos cambios visuales en la ventana con los que puede que tengas que hacer más trabajo del necesario si no te agrada lo suficiente (me refiero a lidiar con el area no cliente de la barra de título para añadir más botones).

Saludos!
#3749
Genial herramienta.

¿Has pensado en añadir una característica para poder descargar los videos también? (a la mayor calidad posible disponible en Youtube), sería muy util para descargar videoclips musicales.

Saludos!