elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderadores: Novlucker, seba123neo, kub0x, Eleкtro)
| | | |-+  Declaración duplicada del miembro Size y Point.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Declaración duplicada del miembro Size y Point.  (Leído 546 veces)
zalazar16

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Declaración duplicada del miembro Size y Point.
« en: 11 Agosto 2017, 12:19 »

Este error viene generandose de una aplicación que alguien lo adujo de C# a VB.NET, con un supuesto programa en vz de traducirlo manualmente y el código C# original se perdió y quedó el revoltillo de VBNET... Sé, que ya el amigo Elektro, muy maravillosa su ayuda y excelente usuario, me ayudó con e programa anterior, he tratado de corregir ese error pero no he podido, me sigue lanzando esa misma fila de hileras de error.


Si hay alguien en el grupo que me pueda ayudar o cualquier cosa que pueda aportar, bienvenido sea, y a quien interese aqui está el link del CodeFonte que lanza los errores  :)

http://www.mediafire.com/file/1bl0l4c5xc2nn0t/LOTER%C3%8DA+MONTOS+ALTOS.zip


En línea

NEBIRE


Conectado Conectado

Mensajes: 693


Ver Perfil
Re: Declaración duplicada del miembro Size y Point.
« Respuesta #1 en: 12 Agosto 2017, 07:46 »

Es imposible ejecutar el proyecto para ver qué error marca, faltan ficheros y arroja un montón de errores (para en el número 103)...

Es muy probable que hayas declarado en algún método dos veces un campo del mismo nombre.

Te voy algunos consejos, que deberías aplicar d eforma inmediata a tu sopa de espaguetis digo código:
1 - No es buena idea llamar a un miembro con el mismo nombre que el tipo cual es, se presta a confusión, además, cualquier cambio al nombre podría aplicarse también al tipo de forma inadvertida.
Código
  1. Dim point = New Point(&H2C8, &H1F0)
Podrías llamarlo por ejemplo en español, y quedaría así:
Código
  1. Dim punto = New Point(&H2C8, &H1F0)

2 - Cuando creas una variable para establecerla una sola vez y aisgnarla una sola vez, te la puedes ahorrar. Esto, es una idiotez:
Código
  1. Dim point = New Point(&H2C8, &H1F0)
  2. Me.TextBox5.Location = point
  3. size = New Size(120, &H1D)
  4. Me.TextBox5.Size = size
  5.  
Puedes hacer directamente:
Código
  1. Me.TextBox5.Location = New Point(&H2C8, &H1F0)
  2.  
  3. Me.TextBox5.Size = New Size(120, &H1D)
  4.  

3 - el código está lleno de referencias a "Me". cuando un objeto se llama cada vez, se lo busca en la tabla para obtener su dirección y con ella prosigue la búsqueda para el miembro interno.... entonces esto que sigue... es perder tiempo... es como si 5 personas en una mesa te piden tabaco una detrás de otra, y tú cada vez, sacas la cajetilla de tu tabaco, ofreces y la vuelves a guardar, vuelves a sacarla, ofreces y la vuelves a guardar... acaso no es mejor sacarla, ofrecer a todos y ya entonces la guardas????
Código
  1.            Me.TextBox4.Location = point
  2.            Me.TextBox4.MaxLength = 5
  3.            Me.TextBox4.Name = "TextBox4"
  4.            size = New Size(&H48, &H1D)
  5.            Me.TextBox4.Size = size
  6.            Me.TextBox4.TabIndex = &H19
  7.            Me.TextBox4.Text = ""
  8.            Me.TextBox5.Enabled = False
  9.            point = New Point(&H2C8, &H1F0)
  10.            Me.TextBox5.Location = point
  11.            Me.TextBox5.Name = "TextBox5"
  12.            size = New Size(120, &H1D)
  13.            Me.TextBox5.Size = size
  14.            Me.TextBox5.TabIndex = &H1A
  15.            Me.TextBox5.Text = "TextBox5"
  16.            Me.TextBox6.Enabled = False
Es mejor hacelro así:
Código
  1.     With Me
  2.            .TextBox4.Location = point
  3.            .TextBox4.MaxLength = 5
  4.            .TextBox4.Name = "TextBox4"
  5.            size = New Size(&H48, &H1D)
  6.            .TextBox4.Size = size
  7.            .TextBox4.TabIndex = &H19
  8.            .TextBox4.Text = ""
  9.            .TextBox5.Enabled = False
  10.            point = New Point(&H2C8, &H1F0)
  11.            .TextBox5.Location = point
  12.            .TextBox5.Name = "TextBox5"
  13.            size = New Size(120, &H1D)
  14.            .TextBox5.Size = size
  15.            .TextBox5.TabIndex = &H1A
  16.            .TextBox5.Text = "TextBox5"
  17.            .TextBox6.Enabled = False
  18.     End With

4 - No conoces el bloque de condiciones "select case"?. Esto queda horrooroso y es ineficiente...
Código
  1. If (Me.OPCB = 1) Then
  2.                str = "Select COD,NOMBRE,ORD,LIM_TRIPLE,LIM_TERMI,PRE_TRIPLE,PRE_TERMI,CIERRE,ACTIVA,APRO,PUNTA,COLA from loteria WHERE TIPO='L' order by ord"
  3.                Me.ListBox4.Items.Add("Cod         Nombre                                Orden     Lim/Triple  Lim/Term  P/Triple   P/Term   H/Cierre  Activado Punta Cola")
  4.            End If
  5.            If (Me.OPCB = 4) Then
  6.                str = "Select COD,NOMBRE,ORD,LIM_TRI_ZOD,LIM_TER_ZOD,PRE_TR_ZOD,PRE_TE_ZOD,CIERRE,ACTIVA,APRO FROM LOTERIA WHERE TIPO='Z' order by ord"
  7.                Me.ListBox4.Items.Add("Cod      Nombre                                    Orden Lim/Tr/Zod Lim/Te/Zod P/Tr/Zod P/Te/Zod H/Cierre Activado")
  8.            End If
  9.            If (Me.OPCB = 3) Then
  10.                str = "Select COD,NOMBRE,ORD,LIM_COMBO,LIM_ANIMAL,PRE_COMBO,PRE_ANIMAL,CIERRE,ACTIVA,APRO from loteria WHERE TIPO='A' order by ord"
  11.                Me.ListBox4.Items.Add("Cod      Nombre                                    Orden Lim/Animal Lim/Combo  Pre/Anim Pre/Term H/Cierre Activado")
  12.            End If
  13.            If (Me.OPCB = 5) Then
  14.                str = "Select COD,NOMBRE FROM animal ORDER BY COD"
  15.                Me.ListBox4.Items.Add("Cod      Nombre                 ")
  16.            End If
  17.            If (Me.OPCB = 6) Then
Si la ejecución de una condición no modifica el objeto que se sigue mirando, el código anterior es ineficiente, porque solo puede ser un valor entre ellos (o ninguno), pero tú obligas a compararse en todos los casos iempre incluso cuando ya se haya encontrado. El bloque Select Case, evalúa la condición y 'SALTA' al punto del código donde corresponde y no evalúa para ninguna otra condición....
Código
  1. Select case Me.OPCB
  2.     case 1
  3.           str = "Select COD,NOMBRE,ORD,LIM_TRIPLE,LIM_TERMI,PRE_TRIPLE,PRE_TERMI,CIERRE,ACTIVA,APRO,PUNTA,COLA from loteria WHERE TIPO='L' order by ord"
  4.                Me.ListBox4.Items.Add("Cod         Nombre                                Orden     Lim/Triple  Lim/Term  P/Triple   P/Term   H/Cierre  Activado Punta Cola")      
  5.     case 4
  6.                str = "Select COD,NOMBRE,ORD,LIM_TRI_ZOD,LIM_TER_ZOD,PRE_TR_ZOD,PRE_TE_ZOD,CIERRE,ACTIVA,APRO FROM LOTERIA WHERE TIPO='Z' order by ord"
  7.                Me.ListBox4.Items.Add("Cod      Nombre                                    Orden Lim/Tr/Zod Lim/Te/Zod P/Tr/Zod P/Te/Zod H/Cierre Activado")          
  8.     case 3
  9.                str = "Select COD,NOMBRE,ORD,LIM_COMBO,LIM_ANIMAL,PRE_COMBO,PRE_ANIMAL,CIERRE,ACTIVA,APRO from loteria WHERE TIPO='A' order by ord"
  10.                Me.ListBox4.Items.Add("Cod      Nombre                                    Orden Lim/Animal Lim/Combo  Pre/Anim Pre/Term H/Cierre Activado")
  11.     case 5
  12.                str = "Select COD,NOMBRE FROM animal ORDER BY COD"
  13.                Me.ListBox4.Items.Add("Cod      Nombre                 ")
  14.     case 6
  15.         '.....
  16.     case else
  17.         '....
  18. End Select

5 - No hace falta que pongas una línea por cada declaración... especialmente si no le vas a asignar ningún valor de entrada.... Así este código:
Código
  1.                Dim str2 As String
  2.                Dim str3 As String
  3.                Dim str4 As String
  4.                Dim str5 As String
  5.                Dim str6 As String
  6.                Dim str7 As String
  7.                Dim str8 As String
  8.                Dim str9 As String
  9.                Dim str10 As String
  10.                Dim str11 As String
Se vería más claro así:
            
Código
  1.    Dim str2 As String, str3 As String, str4 As String, str5 As String, str6 As String
  2.                Dim str7 As String, str8 As String, str9 As String, str10 As String, str11 As String
  3.  

6 - Cuando tienes varias asignaciones o código repetitivo, es preferible usar un bucle. es más limpio y claro el código... esto es cansino:
Código
  1. str2 = reader.Item(0).ToString
  2.                        str3 = reader.Item(1).ToString
  3.                        str4 = reader.Item(2).ToString
  4.                        str5 = reader.Item(3).ToString
  5.                        str6 = reader.Item(4).ToString
  6.                        str7 = reader.Item(5).ToString
  7.                        str8 = reader.Item(6).ToString
  8.                        str9 = reader.Item(7).ToString
  9.                        str10 = reader.Item(8).ToString
  10.                        Me.ListBox4.Items.Add(String.Concat(New String() { str2, ChrW(9), str3, ChrW(9), str4, ChrW(9), str5, ChrW(9), str6, ChrW(9), str7, ChrW(9), str8, ChrW(9), str9, ChrW(9), str10 }))
Es mucho mejor declarar un array de string, y asignarlas en un bucle, finalmente hay dos opciones para añadirlos al listbox...
Código
  1.    Dim str2(0 to 8) as string
  2.    Dim k as integer
  3.    For k=0 to 8
  4.        Str2(k) = reader.Item(k).ToString & chrW(9) ' <----- Notar
  5.    Next
  6.    ListBox4.Items.AddRange(str2)  '¡ puedes usar AddRange...
  7.  
   
Código
  1. Dim str2(0 to 8) as string
  2.    Dim k as integer
  3.    For k=0 to 8
  4.        Str2(k) = reader.Item(k).ToString
  5.    Next
  6.    ListBox4.Items.Add(Strings.Join(str2,ChrW(9))  ' <---- se usa Join, para concatenar el array de strings, y el separador sigue siendo el mismo. El tabulador...

7 - Tienes bloques de código a patadas como el siguiente, que en realidad se pueden resolver en un bucle, y en cualquier caso mucho más simplificado que esta madeja de hilos dejada al gato para su entretenimiento... tiene multitud de sangre derramándose... :laugh: :laugh: :laugh: :laugh:
Código
  1.            If (Strings.Len(str3) = 4) Then
  2.                If (StringType.StrCmp(Strings.Mid(str3, 1, 1), ".", False) = 0) Then
  3.                    str2 = String.Concat(New String() {Strings.Mid(Strings.Trim(str3), 2, 1), Strings.Mid(Strings.Trim(str3), 3, 1), ".", Strings.Mid(Strings.Trim(str3), 4, 1), "0"})
  4.                    Return obj2
  5.                End If
  6.                If (StringType.StrCmp(Strings.Mid(str3, 2, 1), ".", False) = 0) Then
  7.                    str2 = ("0" & Strings.Mid(Strings.Trim(str3), 1, 1) & "." & Strings.Mid(Strings.Trim(str3), 3, 2))
  8.                    Return obj2
  9.                End If
  10.                If (StringType.StrCmp(Strings.Mid(str3, 3, 1), ".", False) = 0) Then
  11.                    str2 = (Strings.Mid(Strings.Trim(str3), 1, 2) & "." & Strings.Mid(Strings.Trim(str3), 4, 1) & "0")
  12.                    Return obj2
  13.                End If
  14.                If (StringType.StrCmp(Strings.Mid(str3, 4, 1), ".", False) = 0) Then
  15.                    str2 = (Strings.Mid(Strings.Trim(str3), 1, 3) & "." & Strings.Mid(Strings.Trim(str3), 5, 1) & "0")
  16.                    Return obj2
  17.                End If
  18.                If (StringType.StrCmp(Strings.Mid(str3, 5, 1), ".", False) = 0) Then
  19.                    str2 = (Strings.Mid(Strings.Trim(str3), 1, 3) & "." & Strings.Mid(Strings.Trim(str3), 5, 2))
  20.                    Return obj2
  21.                End If
  22.                str2 = (Strings.Mid(Strings.Trim(str3), 1, 2) & "." & Strings.Mid(Strings.Trim(str3), 3, 2))
  23.                Return obj2
  24.            End If

Primero como str3 es una cadena de texto, puedes directamente escribir
Código
  1. if (str3.Length = 6) then
en vez de
Código
  1. If (Strings.Len(str3) = 6) Then
Ya que lenght es un método del tipo String, igualmente poseee el método Trim, TrimEnd, TrimStart, y aunque no tieme Mid, es equivalente a Char.
Así este código:
Código
  1. Strings.Mid(str3, 5, 1)
Puede rescribirse mejor así:
Código
  1. Str3.Char(5)
Si en vez de recibir un solo carácter es preciso recioger varios, entonces en vez de Char, se usaría el método Substring
Así un código como este:
Código
  1. Strings.Mid(str3, 5, 4)
Puede rescribirse mejor así:
Código
  1. Str3.SubString(5,4)

Dado que cada vez estás haciendo Trim, ahorrarías código si durante la asignación de la cadena ya retiras sus espacios en blanco y así no es preciso escribirlo en cada ocasión... se hace una sola vez al comienzo y listo.
Código
  1. str3 = "...loque sea la asignación".Trim

Mirando por encima ese bloque de código, simplemente estás tratando de ver si hay un punto, y si no lo hay en algunos caso añades más ceros, en otros dado que el punto no tiene mayúsculas ni minúsculas, también te puedes evitar la comparación de esa forma. Como te he dicho si necesitas buscar si está en alguna posición, es mejor hacer un bucle.

  
Código:
dim k as integer
    dim strx() as char = str3.ToChararray
    For k=0 to strx.Lenght -1
        if strx(k) = "." then
        
            ' .... lo que tengas que hacer.
            ' Si ya no se requiere seguir buscando Exit for , ó Return Obj2
        End if
    Next
Ahora bien, si debes hacer cosas distintas según donde esté o debiera estar el punto, entonces lo mejor es buscar directamente si existe el punto en la cadena y obtener su posición.
    
Código
  1. Dim k As Integer = str3.IndexOf(".")
Si k es -1 implica que no aparece en la cadena, entonces no es necesario buscar una a una en cada posición. Y si debe aparecer en varias posiciones y hacer algo si no aparece en una en concreto, entonces lo metes en un bucle:

    
Código
  1. Dim j as integer
  2.     Dim k As Integer = str3.IndexOf(".")
  3.     If (k>-1)then
  4.       k+=1
  5.       j=(k +1)
  6.       do While str3.IndexOf(".",k)
  7.           If (k > j) then
  8.              ' no aparece en la posición j... hacer lo que proceda hacer.
  9.           Else
  10.               k+=1
  11.               j = k
  12.           End if
  13.       Loop
  14.    Else
  15.         ' no aparece en la posición 0... hacer lo que proceda hacer.
  16.    End if
       
8 - tampoco tiene sentido que la cadena str3, no cambia de tamaño, esté continuamente poniendo código para ver su tamaño, eso se hace de una sola vez:
    n = Str3.Length
    Si (n = 1) luego....
   y ya no hay que estar preguntando cada vez por el tamaño de la cadena.
    
9 - Los comentarios brillan por su ausencia... excelente ayuda para que te ayuden....


 ...en fín podría seguir enumerando "problemas con el codigo", pero cuando son tantos, el problema no es el código, si no el programador... te falta mucha base. si ni siquiera conoces los típos básicos como el String...para que´seguir con cosas más complejas.


« Última modificación: 12 Agosto 2017, 07:49 por NEBIRE » En línea

zalazar16

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Declaración duplicada del miembro Size y Point.
« Respuesta #2 en: 12 Agosto 2017, 12:43 »

Es que el código fuente y en la forma que se programó la aplicación.... Da asco sinceramente, la aplicación no la programé yo, pero me pidieron que modificara algo, es un fastidio, en ves de Formularios, un solo formulario para todo y groupboxs como si fueran ventas, por lo menos e el otro el amigo Elektro pudo quitar el error de size y point, y pudo correr bien el programa, es que en todos lados dice dim size as new size
uno debajo del otro, al igual que en point....... No sé exactament que hizo, pero comparando le agrego una letra a cada componente y suprimío las posiciones, aunque también es raro que las declaraciones size y point den valores hexadecimales.... creo que este programa fue hcho en otro lenguaje, entorno a visual studio pero no VBNET, y tradujeron todo a las patadas..... Muchas gracias or tu ayuda. y sí es un tremendo spaguetti, demasiadas lineas de código innecesario, creo que hay más codigo basura que lo que ncesita la app :rolleyes:
En línea

NEBIRE


Conectado Conectado

Mensajes: 693


Ver Perfil
Re: Declaración duplicada del miembro Size y Point.
« Respuesta #3 en: 12 Agosto 2017, 17:43 »

Bien... pero incluso si no has hecho el código, o si fue 'traducido' desde otro lenguaje, sería conveniente que aclares lo desastroso del código a quien te hizo el encargo y que puedes optimizarlo para que sea más rápido, claro y conciso (menos tamaño en disco y en memoria), por un precio extra... y que es conveniente hacer eso antes de los cambios que reclamen hacer.

Ahora mismo cualquier cambio supone un cierto 'sufrimiento', y mucho tiempo extra, porque exige repasar la infinidad de variables y líneas cuasi equivalentes, por si hay alguna discrepancia que no salte con claridad a la vista. Sin embargo tras perder el tiempo repasando, al final se ve que la mayor parte del código es ineficiente y redundante, podría abreviarse probablemente a una vigésima parte del tamaño actual... En fin si te han encargado hacer cambios, diles que la propia ineficiencia del código requiere un cambio urgente... y de paso cóbralo...


-----------------------------
En cuanto a tu dilema, ya te he conestado, aunque quizás te haya pasado inadvertido entre tantas sugerencias, me autocito y lo comento más específicamente:

Donde tienes cada una de las líneas de éstas (con size y point):
Código
  1.    Dim point = New Point(&H2C8, &H1F0)
  2.    Me.TextBox5.Location = point
  3.    size = New Size(120, &H1D)
  4.    Me.TextBox5.Size = size
  5.  

Cámbialas por otras equivalente, es decir elimina la declaración del:
 size =...
 point = ...
y lo que está al otro lado del igual se lo asignas directamente a la línea que antes recibía un:
 textbox...Location = point
 textox... Size = size

Y te quedarían así:
Código
  1.    TextBox5.Location = New Point(&H2C8, &H1F0)
  2.    TextBox5.Size = New Size(120, &H1D)

Habiéndo remplazado todas las líneas que tienes con size y point, de este modo, ya no puede darte problemas con 'size' ni 'point', porque han desaparecido del código...

---------------------------
...y en cuanto a los valores hexadecimales, no tiene demasiada importancia en que sistema de numeración estén los valores, pero si te cuesta entender los valores hexadecimales cámbialos a decimales... si lo precisas usa la calculadora 'científica' (de win2).
« Última modificación: 12 Agosto 2017, 17:48 por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cuenta de usuario duplicada
Windows
AsimoJMSR 3 2,554 Último mensaje 11 Diciembre 2007, 00:55
por l337*
declaraciòn duplicada en el alcance actual.. (CODIGO) « 1 2 »
Programación Visual Basic
CL1O 15 4,894 Último mensaje 23 Diciembre 2010, 21:21
por BlackZeroX (Astaroth)
Tengo duplicada la IP de mi equipo
Redes
PRM4790A 0 1,066 Último mensaje 29 Septiembre 2013, 20:59
por PRM4790A
Cuenta duplicada , ¿Porque?
Chats; IRC y Messengers
lantejuela123 6 2,906 Último mensaje 16 Marzo 2015, 05:21
por scott_
MAC duplicada
Redes
larambla 2 1,127 Último mensaje 26 Mayo 2016, 18:50
por larambla
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines