2011-01-13 28 views
7

Estoy usando Windows 7 y mi proyecto está en VB 6.0. Recibo errores mientras estoy ejecutando mi programa. Se muestra el error:Error "Tipo definido por el usuario no definido" en VB 6 bajo Windows 7

User-defined type not defined.

Aquí está mi código:

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) 
    Select Case Button.Key 
     Case "trace": Call mntrace_Click 
     Case "snrplot": Call mnSnrplot_Click 
     Case "skyplot": Call mnskyplot_Click 
     Case "nmea": Call mnNmea_Click 
     Case "navigation": Call mnNavigation_Click 
     Case "survey": Call mnSurvey_Click 
     Case "pause/start": Call mnpause_Click 
     Case "save": Call mnsave_Click 
     Case "print": Call mnprint_Click 
     Case "offline": Call mnoffline_Click 
    End Select 
End Sub 

¿Cómo puedo solucionar este error?

+1

¿Cómo espera que depuremos un problema como este a menos que publique algún código? Específicamente, la parte que el depurador resalta para usted ya que contiene el error. –

+0

Private Sub Toolbar1_ButtonClick (ByVal Como botón MSComctlLib.Button) Select Case Button.Key Caso "traza": Call mntrace_Click Caso "snrplot": Call mnSnrplot_Click Caso "trazado espacial": Call mnskyplot_Click Caso "NMEA": Call mnNmea_Click Caso "navegación": Call mnNavigation_Click Caso "encuesta": Call mnSurvey_Click Caso "pausa/iniciar": Call mnpause_Click Caso "salvar": Call mnsave_Click Caso "imprimir": Call Caso mnprint_Click "fuera de línea": Call mnoffline_Click End Select End Sub –

Respuesta

20

El compilador está poniendo de relieve de forma automática la primera línea de la declaración de función para que cuando aparece el error. Eso significa que el error ocurre en algún lugar dentro de esa línea. A veces eso no es tan útil como te gustaría, pero en este caso, te dice mucho.

Específicamente, el único "tipo definido por el usuario" (realmente, el único "tipo") que aparece en la declaración de función es MSComctlLib.Button. Lo que el mensaje de error del compilador le dice aquí es que no sabe qué es MSComctlLib.Button. Por lo tanto, asume que es tipo "definido por el usuario" porque a menudo no sabe de qué está hablando el usuario. :-)

De cualquier forma, la solución es simple: necesita decirle al compilador qué es MSComctlLib.Button. En este caso, se equivocó al suponer que es un tipo definido por el usuario. En realidad, es un control que se proporciona en la Biblioteca de controles comunes de Microsoft Windows. Para decirle a VB 6 sobre este control, debe agregar el componente correspondiente a su proyecto. Siga estos pasos:

  1. En el menú "Proyecto", seleccione "Componentes".

  2. En el cuadro de diálogo que aparece, recorra aproximadamente 2/3 del camino de la lista hasta las M's. Coloque una marca de verificación en los elementos "Microsoft Windows Common Controls 6.0" y "Microsoft Common Controls-2 6.0". (No se preocupe si el suyo tiene una designación paquete de servicio diferente.)

              Components dialog in VB 6 IDE

  3. Haga clic en el botón OK. Si eres rápido, verás algunos controles adicionales agregados a tu caja de herramientas. Estos son los controles proporcionados por las bibliotecas de componentes que acaba de agregar. Entre esos controles se encuentra uno llamado Button.

Por último, tratar de compilar y ejecutar el proyecto de nuevo, todo debería estar bien esta vez, porque ahora el compilador sabe qué tipo es MSComctlLib.Button. En caso de que todavía no lo haga, es un botón que aparece en su barra de herramientas. El control de la barra de herramientas es proporcionado por la biblioteca Common Controls e incluye un tipo que define un botón individual que aparece en esa barra de herramientas.

+0

Después de seguir estos pasos, me sale la biblioteca de objetos faltante. ¿Cómo elimino eso? –

0

Parece que le falta una referencia a una biblioteca de objetos.

(¿Ha ejecutado sin errores en otros lugares?)

+0

sory no puedo atraparte. ¿puedes explicar? –

+1

Creo que Cody Gray lo ha explicado muy bien arriba :-) –

0

Creo que acabas de copiar y pegar ese código en otro lugar. Normalmente, si quiere hacer referencia a MSComctlLib, normalmente hará primero los pasos indicados por Cody Gray aquí antes de que pueda acceder a la biblioteca de tipos.

Cuestiones relacionadas