Un proyecto de Visual Basic 6.0 que se actualizó con Visual Studio .NET 2003 ya no funciona como se esperaba cuando hace clic para activar la casilla de verificación "Habilitar marco de aplicación" en Visual Studio 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 906769 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Un proyecto de Microsoft Visual Basic 6.0 que se ha actualizado mediante Microsoft Visual Studio .NET 2003 ya no funciona como se esperaba cuando hace clic para activar la casilla de verificación Habilitar marco de trabajo de la aplicación en Microsoft Visual Studio 2005.

Tenga en cuenta la situación siguiente:
  • Tiene un proyecto de EXE estándar que se creó utilizando Visual Basic 6.0.
  • Ha actualizado el proyecto EXE estándar a un proyecto de Microsoft Windows Forms utilizando Visual Studio .NET 2003.
  • A continuación, ha vuelto a compilar el proyecto actualizado de formularios Windows Forms en Visual Studio 2005.
En este escenario, puede observar el comportamiento siguiente cuando ejecuta el proyecto de formularios Windows Forms:
  • Si utiliza la propiedad Form1.DefInstance. PropertyName hacer referencia a una propiedad de formulario de la instancia predeterminada de un formulario de inicio, los cambios realizados en la propiedad no surtirán efecto no.
  • Si utiliza el método Form1.DefInstance. MethodName para hacer referencia a un método, cualquier método que llama a en la instancia predeterminada de un formulario de inicio no funciona como el excluido.
Nota Form1 es un marcador de posición para el nombre de clase del formulario de inicio.

Causa

Este problema puede producirse en el escenario que se menciona en la sección "Síntomas" Si habilita la opción Habilitar marco de trabajo de la aplicación en Visual Studio 2005.

Herramienta de actualización del Visual Basic Agrega try / bloque catch al constructor de nuevo en el proyecto. Cuando está habilitada la la opción Habilitar marco de aplicación , la instrucción If en este try / catch bloque ya no se evalúa en true en Visual Studio 2005.

En el ejemplo de código siguiente se muestra la try / catch bloque que contiene la instrucción If .
Public Sub New()
    ?
    Try
        'For the startup form, the first instance that is created is the default instance.
        If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then
            m_vb6FormDefInstance = Me
        End If
    Catch
    End Try
    ?
End Sub
causa de este comportamiento, el m_vb6FormDefInstance me = instrucción en el constructor del formulario nuevo no se puede ejecutar cuando se inicializa el formulario de inicio. Por lo tanto, la variable m_vb6FormDefInstance no señala a la instancia predeterminada del formulario de inicio una vez inicializado el formulario de inicio.

Cuando se utiliza primero la propiedad Form1.DefInstance más adelante en el código, se crea un nuevo formulario. Además, se establece la variable m_vb6FormDefInstance para señalar a este nuevo formulario. Cualquier llamada posterior a la propiedad Form1.DefInstance devolverá una referencia a este nuevo formulario en lugar de una referencia al formulario de inicio.

Solución

Para resolver este problema, cambiar la lógica anterior desde el Si instrucción para parecerse al siguiente ejemplo de código.
If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Or _
   System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is My.Application.GetType Then
	m_vb6FormDefInstance = Me
End If

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Referencias

Para obtener más información sobre el método Object.GetType , visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/system.object.gettype(vs.71).aspx
Para obtener más información acerca de la propiedad MemberInfo.DeclaringType , visite el siguiente sitio Web de MSDN:
http://msdn2.microsoft.com/en-us/library/system.reflection.memberinfo.declaringtype(vs.71).aspx

Propiedades

Id. de artículo: 906769 - Última revisión: jueves, 22 de noviembre de 2007 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
Palabras clave: 
kbmt kbprogramming kbtshoot kbprb KB906769 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 906769

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com