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

#1771
.NET (C#, VB.NET, ASP) / Re: ayuda en VB.NET
12 Septiembre 2017, 17:34 PM
Cita de: **Aincrad** en 12 Septiembre 2017, 17:03 PM

Código (vbnet) [Seleccionar]
Dim dir As New Directory(...)

AHORA ME MARCAN DOS ERRORES

error en la linea 2 en la palabra dir:
Error   1   Type 'System.IO.Directory' has no constructors.   

error en la linea 6 en la palabra dir:
Error   2   Value of type 'System.IO.Directory' cannot be converted to 'String'.   

El código lo has copiado mal. Estoy usando la clase DirectoryInfo, no Directory. De todas formas no es necesario utilizar dicha clase (a menos que le vayas a sacar provecho), puedes declarar un String en su lugar ( Dim dirPath As String = Environment.GetFolderPath(...) ).

Si vas a usar la clase DirectoryInfo, entonces en la linea que he resaltado aquí abajo deberás hacer un cambio para usar la propiedad DirectoryInfo.FullName:
Cita de: **Aincrad** en 12 Septiembre 2017, 17:03 PM
Código (vbnet,2) [Seleccionar]

           For Each Archivo As String In My.Computer.FileSystem.GetFiles( _
                                   dir, _                                          'ME MARCA ERROR EN DIR
                                   ...

...puesto que 'dir' es un objeto (instancia de la clase DirectoryInfo), no es una variable String.

Saludos.
#1772
.NET (C#, VB.NET, ASP) / Re: Duda con getElementByiD
12 Septiembre 2017, 17:09 PM
Hola.

Las preguntas sobre VB.NET van en el subforo de programación .NET Framwork, no en el subforo de VB6.




Te muestro un ejemplo completo:

Código (vbnet) [Seleccionar]
Dim sourceCode As String =
   <html>
       <body>
           <Select Class="form-control input-sm" name="aff_test_id" id="aff_test_id">
               <option value="1"> --</option>
               <option value="2"> cuerpo</option>
           </Select>
       </body>
   </html>.ToString()

' Creo una nueva instancia del tipo WebBrowser para esta demostración,
' lo que nos permitirá utilizar una instancia de la clase HtmlDocument,
' donde cargaremos el código fuente Html declarado en la variable sourceCode.
Using wb As New WebBrowser()

   wb.ScriptErrorsSuppressed = True
   wb.DocumentText = ""
   wb.Document.OpenNew(replaceInHistory:=True)
   wb.Document.Write(sourceCode)

   Dim el As HtmlElement = wb.Document.GetElementsByTagName("option")(1)
   ' O también: wb.Document.GetElementById("aff_test_id").GetElementsByTagName("option")(1)

   ' Para cambiarle el atributo "value":
   ' el.SetAttribute("value", "2")

   ' Para cambiarle el texto:
   el.InnerText = "Hello World"

   Debug.WriteLine(el.OuterHtml)

End Using


Saludos.
#1773
.NET (C#, VB.NET, ASP) / Re: ayuda en VB.NET
12 Septiembre 2017, 16:31 PM
Hola. Puedes usar la función Environment.GetFolderPath() junto a la enumeración Environment.SpecialFolder:

Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Dim dir As New DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Startup))


Además también puedes expandir el valor de cualquier variable de entorno que esté definida en el sistema operativo:

Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%UserProfile%")


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%")


Código (vbnet) [Seleccionar]
' C:\Users\{Usuario}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Dim dirPath As String = Environment.ExpandEnvironmentVariables("%AppData%\Microsoft\Windows\Start Menu\Programs\Startup")





Con respecto al código que has mostrado:

1. El caracter guión bajo ("_") de linebreak es innecesario escribirlo en versiones actuales de VB.NET. Solo consigue afear el código fuente.

2. Por cuestiones de rendimiento y velocidad de respuesta de la UI, te sugiero sustituir la llamada al método ListBox.Items.Add() por: ListBox.BeginUpdate() + ListBox.Items.AddRange()  + ListBox.EndUpdate(), en ese orden.

3.
Citar
Código (vbnet) [Seleccionar]
Form7.Show()
en cada iteración del búcle estás llamando al método para mostrar ese form... probablemente eso no sea lo que realmente pretendías hacer.

Saludos.
#1774
Cita de: SrTrp en 12 Septiembre 2017, 04:54 AMSi pudieran recomendarme algún ide para programar en android si es posible que no sea android studio

Visual Studio con el framework de Xamarin for Visual Studio. Desde el propio instalador de Visual Studio 2017 te puedes instalar todos los componentes necesarios.

PD: Esto solo ha sido una recomendación como puede ser cualquier otra.

Saludos
#1775
Foro Libre / Re: Como escribir dentro del cuadrado
9 Septiembre 2017, 14:43 PM
¿Cómo se le ocurre a alguien formular una duda tan específica sobre programación sin mencionar lo más básico e importante (el lenguaje)?. En serio, ¿cómo es posible?, si fuera un niño despistado de 9 años que acaba de empezar hace 4 dias en la programación pues aun lo entendería, pero es que siempre suelo ver este tipo de falta de ifnormación en personas adultas y con estudios. Jamás lo entenderé.

Bueno, en respuesta a tu pregunta: dependiendo de las capacidades del lenguaje tendrás que recurrir a la metodología que mencionó Orubatosu, o a la que mencionó NEBIRE. Suponiendo que el lenguaje lo permita, entonces la mejor solución es el posicionamiento absoluto de las coordenadas dentro del buffer stdout (lo que dijo NEBIRE, vaya).

Saludos.
#1776
Hola.

Por "pruebas unitarias" supongo que te refieres a tests de unidades de código (Unit Testing).

Cita de: n-utz en  7 Septiembre 2017, 03:05 AMEmpecemos por lo principal, creé un proyecto aparte en la misma solución y debido a eso estoy teniendo problemas en acceder a las clases de mi proyecto principal, no sé si tengo que agregar alguna dependencia o referencia, o simplemente incluir los namespace.

Por supuesto debes agregar una referencia, concretamente una referencia de proyecto. Te muestro un ejemplo:



Los proyectos que estén agregados en tu solución aparecerán automaticamente ahí en esa lista, no tienes que buscarlos ni buscar las dll.




Cita de: n-utz en  7 Septiembre 2017, 03:05 AMLo segundo, y esto es más específico, hacemos los mappings con Spring Object.
En los test tengo que teestear parte del mapeo en varias situaciones, y cuando realizar el mapeo, utilizo la funcion:

ContextRegistry.

Eso me provoca un error que dice Error de contexto inválido para ContextRegistry, la verdad sobre esto busqué en Google y no encontré nada, solo una solución de stack bastante ofusca.

Es una pregunta demasiado específica sobre un framework de terceros como para preguntarlo en un foro aleatorio. Spring.NET tiene una comunidad de usuarios en la que deberías formular tus dudas:


Aparte de para lo que te pueda servir de ayuda la referencia online oficial:
...aunque la referencia online fue actualizada por última vez en el año 2006 :xD.

EDITO: Y ya que estamos, aprovecho la ocasión para recomendarte unos tests de uso genérico (o reusables) cuya aplicación puede servir para cualquier tipo de proyectos:

Saludos.
#1777
.NET (C#, VB.NET, ASP) / Re: Ayuda con DotNet
9 Septiembre 2017, 05:39 AM
Hola.

Asegúrate de seguir las instruccioenes de instalación específica para distribuiciones Debian:


Saludos.
#1778
Hola.

Primero de todo: las preguntas sobre C# van en el subforo de programación .NET Framework.

Todo lo que necesitas saber y aprender está en la MSDN...
...deberías revisarla en el futuro para aclararte tus dudas.




Cita de: EladioJr99 en  9 Septiembre 2017, 03:31 AMsi (n % 2 != 0) significa que el número no es par verdad

Efectivamente. El operador de módulo devolverá el resto después de dividir 'n' por '2', que siempre será Cero si 'n' es divisible por '2', o dicho de otra forma: 0 si 'n' es par.

Saludos.
#1779
Hola.

Cita de: OscarCadenas_91 en  6 Septiembre 2017, 19:09 PM¿Segun ustedes cual creen que es mejor?

No es cuestión de creencias, estamos hablando de un hecho indiscutible: WPF es mejor, puesto que es la evolución directa de WindowsForms. En otras palabras: Winforms = pasado (y con pseudo-obsolescencia programada), WPF = presente y futuro (largo futuro por delante, sin fecha determinada de muerte).

Con respecto a temas de "diseño", WindowsForms se basa en la utilización de la API de Windows para renderizar con GDI+ (DirectShow), mientras que WPF lo hace con la API de DirectX (Direct3D), y éste puede aprovecharse de ciertas ventajas como la aceleración de hardware por GPU al renderizar, entre otros muchos beneficios destacables que afectan positivamente al rendimiento de WPF en comparación con la lenta tortuga de WinForms y su imperfección.

Respecto al rendimiento de tu aplicación, bueno, éste será proporcionál a la calidad de tus algoritmos, ni más, ni menos. No importa si WinForms o WPF, aunque en lo referente al instrumental interno de renderización ya hemos explicado que si, hay una gran diferencia donde WPF es más óptimo que WindowsForms, así que es posible que la velocidad de respuesta de la interfáz de usuario pueda ser algo mejor en WPF si lo comparásemos en igualdad de condiciones con WinForms.

Y respecto a la personalización, todo depende de como lo mires y lo que necesites. WPF es mucho más completo en todos los sentidos (y cada día lo es más, puesto que es una tecnología en continuo desarrollo, a diferencia de WinForms), y eso también incluye que la cantidad de parámetros relacionados con el aspecto y el comportamiento de un control (léase: sus propiedades) sea mucho más amplio en comparación con WinForms. Además en WPF se pueden usar plantillas (templates) para modificar sencillamente el aspecto de un elemento, pero en WinForms también se puede modificar el aspecto de los controles... solo que para hacer grandes cambios en la mayoría de ocasiones se requieren metodologías más tediosas (léase: Platform Invoke).

De todas formas, la respuesta a "¿que tecnología es mejor o más completa?" no debería ser un factor decisivo, me refiero, sin saber que es lo que realmente quieres lograr con la programación, para hacer cosas simples WinForms te servirá perfectamente y te resultará más sencillo. La sofisticación o el perfeccionismo de WPF implica un nivel bastante más elevado de dificultad al programar en comparación con WinForms (empezando por el simple hecho de que tienes que compaginar dos lenguajes al mismo tiempo C#\VB.NET + Xaml ), ten eso presente en tu decisión. Por otro lado, ir a por la tecnología más reciente y sofisticada (WPF) siempre será una buena decisión para todo.

Saludos.
#1780
Hola.

Cita de: carlos7x en  3 Septiembre 2017, 17:19 PMcomo realizo tal operación que me indicas?

( Me tomo la libertad de responderte yo, que hace tiempo que no respondo nada en el foro, y el compañero NEBIRE parece estar un poco ausente a este thread. )

Al decir "deshabilitar un control" yo al menos me estoy refiriendo a deshabilitar las peticiones de redibujado del control. ¿Y cómo se hace esto?... pues depende del escenario...

Si es un control que realice un layout automático, por lo general un contenedor de controles como: TableLayoutPanel, FlowLayoutPanel, o Panel, podemos utilizar el método Control.SuspendLayout(), esto es útil sobre todo al añadir muchos controles al contenedor de controles, ahí queremos suprimir el layout para que el control no se redibuje hasta que hayamos terminado de insertar todos los controles. La supresión del layout afecta a propiedades tales como: Control.AutoSize, Control.Anchor y Control.Dock. Podemos ignorar llamar a SuspendLayout claro está, pero de hacerlo solo conseguiremos que el proceso de inserción /interacción con el control sea lento y feo, produciendo flickering...

Si por lo contrario hablamos de un un control de usuario entonces es mucho más facil "deshabilitar" el control ya que evidentemente tendriamos toda la capacidad de controlar el dibujado del control a nivel interno digamos. Por decir algo: podría ser tan simple como anular (override) la propiedad Control.Enabled e ignorar todo el dibujado del control mientras su valor sea False, por ejemplo.

Para un control de tipo lista, es decir: ListView, ListBox o ComboBox, lo que debemos hacer es llamar al método Control.Beginpdate. Los pasos a seguir serian los siguientes:

...Las operaciones de interacción con la colección (Control.Items) del control aquí...

Con el método Control.BeginUpdate() lo que conseguimos hacer es suprimir cualquier petición de redibujado durante las modificaciones que le hagamos a la colección del control. Cada vez que añadimos un elemento a la colección, se dispara un evento para que el control se redibuje, esto por cada 1 de los elementos que añadamos en el control, por lo tanto resulta evidente que pretender añadir varios elementos a la colección sin preocuparnos del redibujado... provocará una considerable disminuición en el rendimiento del control.

Sin embargo el control DataGridView no expone dicho miembro, pero en su lugar... (sigue leyendo aquí abajo)

Cita de: NEBIRE en  2 Septiembre 2017, 15:29 PMHay que reconocer que el sistema es un poco tonto, porque si se añade al final y el elemento no cabe en la vista, no hace falta en realidad actualizar la vista.... pero...

Así es, pero precisamente para solventar ese problema de raíz es que está la propiedad DataGridView.VirtualMode (con su posterior y tediosa implementación personal):


Ese es el modo más óptimo de administrar la respuesta o "responsividad" de un control DataGridView con exceso de elementos (como los +14.000 en este caso).




De todas formas, para mantener una velocidad de respuesta estable en un DataGridView en la carga de varios elementos, para evitar el redibujado constante y mantener un rendimiento decente, vaya, tampoco es tan dificil, por lo general no debería ser necesario recurrir a implementar el modo virtual, sino que simplemente debemos utilizar un DataSource en lugar de administrar manualmente la cantidad de columnas y filas, y la inserción o eliminación manual de elementos. Que de eso se encargue la lógica del control por si solo mediante el DataSource bindeado. Pero lo cierto es que no he trabajo en escenarios con +14.000 elementos de carga, así que no puedo hablar mucho de lo que no he experimentado...

Eso sí, si por el motivo que sea nos vemos obligados a tener que administrar de forma manual la inserción de elementos en el DataGridView (como parece ser tu caso), entonces para aumentar el rendimiento se debe utilizar el método DataGridView.Rows.AddRange en lugar de DataGridView.Rows.Add (recuerda que por cada elemento añadido el control se redibujará... y no quieres que eso ocurra, así que debes añadir todos los elementos de una sola vez, llamando a AddRange).




Para el tema de las búsquedas... una solución sería dejar un margen de tiempo de inactividad, un "timeout" por así decirlo. En lugar de buscar cada vez que presionas una tecla, lo que debes hacer es determinar (mediante un objeto Timer o StopWatch) cuanto tiempo hace que se pulsó una tecla por última vez (digamos 500 milisegundos, es un buen valor de inactividad), y entonces empezar a realizar la búsqueda en los elementos de la colección. O más sencillo: realizar la búsqueda solamente cuando se presione la tecla ENTER, o al presionar un botón que diga "Buscar".

Saludos.