none
En un ej. de VB Net y Word he visto que declaran una variable así: Dim wrdDataDoc As Word._Document mi pregunta es... RRS feed

Respuestas

  • "James-2016" preguntó:

    > Cuál es la diferencia entre esta declaración:
    >
    > Dim wrdDataDoc As Word._Document
    >
    > ¿y esta otra?
    >
    > Dim wrdDataDoc As Word.Document

    Salvo que yo esté equivocado, entiendo que la única diferencia que existe entre ambas interfaces (que no son clases), es que la interfaz Document (que hereda de _Document), implementa también la interfaz DocumentEvents2_Event, por si quieres trabajar con los eventos de la interfaz Word.Document. Por lo demás, da igual que declares la variable 'wrdDataDoc' con el tipo Word._Document o Word.Document.

    Los desarrolladores de Visual Basic que tengan experiencia con la biblioteca de objetos de Microsoft Word, entiendo que utilizan la interfaz Document porque así se hacía en los tiempos anteriores a Visual Basic .net, pero si vas a comenzar un nuevo proyecto de Visual Basic .net para trabajar con la biblioteca de Word, y no vas a utilizar los eventos de la interfaz Document, puedes hacer uso de la interfaz _Document si así lo deseas.

    En realidad, y ya que lo has preguntado, entiendo que habría que declarar la variable 'wrdDataDoc' con el tipo de dato Word.DocumentClass, que es la clase que implementa ambas interfaces (_Document y Document):

    Dim wrdDataDoc As Word.DocumentClass

    Pero tal y como se indica en la ayuda de dicha clase, parece ser que está reservada para uso interno. Aparte que si la declaras con ese tipo de dato, y tienes activada la instrucción Option Strict, entonces no vas a tener más remedio que hacer las conversiones de manera explícita, porque la mayoría de objetos de Word lo que devuelven son referencias a la interfaz Document.

    Por ejemplo, para obtener la referencia de un nuevo documento de Word en blanco, ejecutarías lo siguiente:

        ' Creamos un nuevo documento en blanco.
        '
        wrdDataDoc = DirectCast(MSWord.Documents.Add(), Word.DocumentClass)

    Es decir, tienes que hacer la conversión con los operadores CType o DirectCast, porque si tienes activada Option Strict, el compilador de Visual Basic no te dejará compilar la siguiente línea:

        wrdDataDoc = MSWord.Documents.Add()  ' Fallará si Option Strict se encuentra activado

    cosa que sí haría si la variable 'wrdDataDoc' está declarada con el tipo de interfaz _Document o Document.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    domingo, 27 de marzo de 2016 17:22
    Moderador

Todas las respuestas

  • "James-2016" preguntó:

    > Cuál es la diferencia entre esta declaración:
    >
    > Dim wrdDataDoc As Word._Document
    >
    > ¿y esta otra?
    >
    > Dim wrdDataDoc As Word.Document

    Salvo que yo esté equivocado, entiendo que la única diferencia que existe entre ambas interfaces (que no son clases), es que la interfaz Document (que hereda de _Document), implementa también la interfaz DocumentEvents2_Event, por si quieres trabajar con los eventos de la interfaz Word.Document. Por lo demás, da igual que declares la variable 'wrdDataDoc' con el tipo Word._Document o Word.Document.

    Los desarrolladores de Visual Basic que tengan experiencia con la biblioteca de objetos de Microsoft Word, entiendo que utilizan la interfaz Document porque así se hacía en los tiempos anteriores a Visual Basic .net, pero si vas a comenzar un nuevo proyecto de Visual Basic .net para trabajar con la biblioteca de Word, y no vas a utilizar los eventos de la interfaz Document, puedes hacer uso de la interfaz _Document si así lo deseas.

    En realidad, y ya que lo has preguntado, entiendo que habría que declarar la variable 'wrdDataDoc' con el tipo de dato Word.DocumentClass, que es la clase que implementa ambas interfaces (_Document y Document):

    Dim wrdDataDoc As Word.DocumentClass

    Pero tal y como se indica en la ayuda de dicha clase, parece ser que está reservada para uso interno. Aparte que si la declaras con ese tipo de dato, y tienes activada la instrucción Option Strict, entonces no vas a tener más remedio que hacer las conversiones de manera explícita, porque la mayoría de objetos de Word lo que devuelven son referencias a la interfaz Document.

    Por ejemplo, para obtener la referencia de un nuevo documento de Word en blanco, ejecutarías lo siguiente:

        ' Creamos un nuevo documento en blanco.
        '
        wrdDataDoc = DirectCast(MSWord.Documents.Add(), Word.DocumentClass)

    Es decir, tienes que hacer la conversión con los operadores CType o DirectCast, porque si tienes activada Option Strict, el compilador de Visual Basic no te dejará compilar la siguiente línea:

        wrdDataDoc = MSWord.Documents.Add()  ' Fallará si Option Strict se encuentra activado

    cosa que sí haría si la variable 'wrdDataDoc' está declarada con el tipo de interfaz _Document o Document.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    domingo, 27 de marzo de 2016 17:22
    Moderador
  • mm gracias por la explicación, entonces continuo con la declaración ._document
    domingo, 27 de marzo de 2016 22:50