Red de conocimiento informático - Problemas con los teléfonos móviles - Programación y habilidades en programación VB

Programación y habilidades en programación VB

Categoría: Informática

4. Errores comunes y precauciones en los arrays

1. Los arrays estáticos declaran variables de subíndice.

N = InputBox("El límite superior de la matriz de entrada")

Dim a (1 an) es un número entero

2. está fuera de límites

Al declarar una matriz, el subíndice al que se hace referencia es mayor o menor que el rango del subíndice.

Dim a(1 a 30) es largo, I es un número entero

a(1)= 1: a(2)= 1

Para i = 3 a 30

a(i) = a(i - 2) a(i - 1)

Siguiente yo

Dimensión de matriz incorrecta <. /p>

Las dimensiones de la declaración de matriz son inconsistentes con las dimensiones de los elementos de la matriz a los que se hace referencia.

Dim a(3, 5) tiene la misma longitud

a(I)=10

Uso de la función Arry

Únicamente Capacidad para asignar valores a variables o matrices dinámicas de variables.

5. Obtenga los límites superior e inferior de la matriz.

Funciones Ubound y Lbound

1.Declaración de matriz Dim

A veces el usuario declara que el límite superior de la matriz está representado por una variable general del programa, como el siguiente segmento de programa como se muestra:

N=InputBox("El límite superior de la matriz de entrada")

Dim a (1 an) es un número entero

Cuando el programa se está ejecutando, se muestra la instrucción Dim. Se muestra el mensaje de error "Se requiere expresión constante". En otras palabras, los límites superior e inferior de la matriz declarada en la declaración Dim deben ser constantes, no variables.

Para resolver problemas comunes en el programa, el primero es declarar que la matriz es muy grande, lo que desperdicia algo de espacio de almacenamiento y el segundo es usar una matriz dinámica para modificar el ejemplo anterior de la siguiente manera:

Reemplazar () Oscurecer como un número entero

N=InputBox("límite superior de la matriz de entrada")

Redefinir un (1 an) como un número entero

2. Array El subíndice está fuera de límites

Se hace referencia a un elemento de matriz inexistente, es decir, el subíndice es mayor o menor que el rango de subíndice cuando se declara la matriz. . Por ejemplo, los siguientes 30 elementos se utilizan para formar la secuencia de Fibonacci:

1, 1, 2, 3, 5, 8, 13, 21, 34,…, 317811, 514229, 832040

El segmento de programa correcto es el siguiente:

Dim a (1 a 30) tiene la misma longitud, i

Si For i=3 a 30 se cambia a For i=1 a 30, el programa Se mostrará el mensaje de error "subíndice fuera de límites" cuando se ejecute, porque cuando se inicia el ciclo i=l, la declaración del cuerpo del ciclo a(i)=a(i-2) a(i -1) se ejecuta, y el subíndice de matriz i-2 e I.

De manera similar, si el ejemplo anterior: a(i)=a(i-2) a(i-1) se cambia a: a(i 2)=a(i) a(i 1) .

Cuando el programa se está ejecutando, cuando el subíndice de la matriz es mayor que el límite superior de 30, también se mostrará el mensaje de error "Subíndice fuera de límites".

3. Error de dimensión de la matriz

La dimensión de la declaración de la matriz es inconsistente con la dimensión del elemento de la matriz al que se hace referencia. Por ejemplo, el siguiente segmento del programa formará y mostrará una matriz de 3×5:

dim a(3.5) is as long

For i=1 to 3

Para j=1 a 5

a(i)=i*j

Imprimir a(one);"";

Siguiente j p>

Imprimir

Siguiente yo

Cuando el programa ejecuta la declaración a(i)=i*j, aparece un mensaje de "error de dimensión", porque cuando Dim se declara Es una matriz bidimensional y tiene un subíndice cuando se hace referencia.

Uso de 4.4.

Función de matriz

La función de matriz puede asignar fácilmente un valor a toda la matriz, pero en este momento solo puede declarar variables de matriz dinámica o variantes entre paréntesis. El tamaño de la matriz después de la asignación está determinado por el número de asignaciones.

Por ejemplo, al asignar los valores 1, 2, 3, 4, 5, 6 y 7 a la matriz A, la Tabla 2.5.1 enumera tres errores y los correspondientes métodos de asignación correctos.

Tabla 2.5.1 Método de representación de funciones de matriz

Asignación de funciones de matriz incorrecta

Asignación de funciones de Ali corregida

Dim a(1 a 8 )

a = matriz (1, 2, 3, 4, 5, 6, 7, 8)

Dim a( ) a=Matriz(1, 2, 3, 4 , 5, 6, 7)

Dim a es un número entero a=Array(1, 2, 3, 4, 5, 6, 7)

Dim a a = array ( 1 , 2, 3, 4, 5, 6, 7)

Dim

a()=Array(1, 2, 3, 4, 5, 6, 7)

Dim a a = array (1, 2, 3, 4, 5, 6, 7)

5.

La función Array puede asignar fácilmente un valor a toda la matriz, pero cómo obtener el límite superior y el límite inferior de la matriz en el programa para garantizar que los elementos de la matriz a los que se accede estén dentro del rango legal, usted Puede utilizar las funciones UBound y LBound para determinar.

En el ejemplo anterior, si desea imprimir el valor de la matriz A, puede hacerlo a través del siguiente segmento de programa:

For i=Lbound(A) to Ubound( A )

Imprimir a(i)

Siguiente I

6. Asignar un valor a la matriz

VB6.0 proporciona el matriz completa La nueva función de asignación facilita las operaciones de asignación de matriz a matriz. Pero no es tan cómodo de usar y tiene muchas limitaciones. La forma de asignación de matriz es la siguiente:

Nombre de matriz 2 = nombre de matriz 1

Analicemos esta forma: el nombre de matriz 2 aquí en realidad solo se puede usar al declarar la matriz anterior Declarada como una variable variante, el tamaño, la dimensión y el tipo de la matriz asignada 2 son los mismos que el nombre de la matriz 1, de lo contrario, si se declara como una matriz dinámica o estática, por ejemplo:

. Nombre de matriz tenue 2() o Nombre de matriz tenue 2 (subíndice)

Cuando el programa ejecuta la instrucción de asignación anterior, se muestra el mensaje de error "No se puede asignar valor a la matriz".

Por lo tanto, por el bien de la seguridad y confiabilidad del programa, se recomienda que los lectores soporten el dolor, usen menos esta nueva función de VB6.0 y usen la estructura de bucle tradicional para asignar valores. a matrices. Por este motivo, no lo ampliaremos en el tutorial.

Errores y precauciones comunes en el proceso del verbo (abreviatura de verbo)

1. Problemas con el algoritmo de programación

La programación en este capítulo es relativamente difícil, principalmente porque Los algoritmos son difíciles de concebir y esta es también la etapa más difícil de aprender en programación. La experiencia le dice a todo principiante en programación que no hay atajos, solo lea más, practique más y supere las dificultades. Antes de encender la computadora, asegúrese de escribir el programa, analizarlo y verificarlo cuidadosamente para mejorar la eficiencia de la depuración en la computadora. Cada vez que un programa supera la depuración que tanto le ha costado conseguir, la alegría obtenida con tanto esfuerzo le dejará sin palabras.

2. Determinar si el proceso de personalización es un subproceso o un proceso funcional.

De hecho, un proceso es una unidad de programa independiente con ciertas funciones y se puede llamar varias veces. La diferencia entre subproceso y proceso de función es que el nombre del primer subproceso no tiene valor, mientras que el nombre del segundo proceso de función tiene un valor. Si el procedimiento tiene un valor de retorno, se acostumbra usar un procedimiento de función; si el procedimiento no devuelve un valor, se usa un subprocedimiento, si el procedimiento devuelve múltiples valores, generalmente se usa para recuperar el resultado mediante una combinación; de parámetros de participación reales, por supuesto, el nombre del procedimiento de función también se puede recuperar, el resto de los resultados se pueden recuperar mediante una combinación de parámetros de participación reales.

3. Determinar el número de parámetros formales y el método de transmisión durante el proceso.

Para los principiantes, es imposible determinar el número y el método de transmisión de parámetros formales al definir un proceso.

La función de los parámetros en el proceso es realizar la comunicación de datos entre el proceso y la persona que llama. Por un lado, la persona que llama proporciona el valor inicial al proceso hijo o al proceso de función pasando los parámetros reales a los parámetros formales; por otro lado, el proceso hijo o al proceso de función pasa el resultado a la persona que llama, lo que se logra mediante; pasando la dirección. Por tanto, el número de parámetros formales está determinado por los dos aspectos anteriores. A los principiantes, a menudo les gusta usar todas las variables utilizadas en el cuerpo del proceso como parámetros formales, lo que aumenta la carga para la persona que llama y la probabilidad de errores. Algunos principiantes omiten todos los parámetros formales, por lo que no se puede lograr la transmisión de datos. No pueden obtener el valor inicial de la persona que llama ni pasar el resultado del cálculo a la persona que llama.

En VB, hay dos formas de participar en una combinación de parámetros reales: paso de valor y paso de dirección. Las diferencias son las siguientes:

(1) En la forma de definición, la primera está precedida por la palabra clave ByVal.

(2) De hecho, la transferencia de valor solo puede transferir el valor inicial al proceso desde el exterior, pero no puede transferir el resultado. La transferencia de dirección se puede pasar hacia adentro y hacia afuera.

(3) Si el parámetro es una matriz, tipo personalizado, variable de objeto, etc. , los parámetros formales solo se pueden pasar por dirección.

4. Realmente involucrado en la correspondencia de tipos de parámetros formales

Al pasar una dirección, los tipos de parámetros formales involucrados en el proceso de llamada deben ser consistentes. Por ejemplo:

El procedimiento funcional se define de la siguiente manera:

Función pública f! (x!)

f=x x

Finalizar función

El proceso de ajuste principal es el siguiente:

Privme Sub Commandl _ Click ()

Difuso y

y=3

Imprimir f(y)

Conector final

En En el ejemplo anterior, el parámetro formal X es de tipo de precisión simple y el parámetro real Y es de tipo entero. Cuando el programa se esté ejecutando, se mostrará el mensaje de error de compilación "No coincide el tipo de parámetro ByRef".

Al pasar un valor, si el valor es un número, el parámetro real pasará el valor al parámetro formal según su tipo. Por ejemplo:

El procedimiento funcional se define de la siguiente manera:

Función pública f! (ByVal x)

f=x x

Finalizar función

El proceso de ajuste principal es el siguiente:

Priva ~ SubCommandI _ Click ()

¡Oscuro!

Y=3.4

Imprimir f(y)

Conector final

El resultado que se muestra después de ejecutar el programa es 6.

5. Alcance de las variables

Para las variables locales, cuando se llama a un procedimiento, se asigna el espacio de almacenamiento de la variable; cuando finaliza la llamada al procedimiento, se recupera el espacio de almacenamiento asignado; , es decir, se llama una vez y se inicializa una vez. Cuando se carga el formulario, las variables no se retienen, se asigna el espacio de almacenamiento para la variable y luego se recupera el espacio de almacenamiento asignado para la variable.

Por ejemplo, si desea ingresar varios valores a través del cuadro de texto, presione la tecla Eeter para cada entrada hasta que el valor ingresado sea 9999. Después de ingresar, encuentre el promedio de los números ingresados.

Sub Textl_Key privado Presionar (la tecla Ascii es un número entero)

¡Merienda! , n

Si KeyAscii=13, entonces

Si Val(Text1)=9999, entonces

Suma = suma/n

Imprime la suma

Otros

Suma=suma Texto1

n=n 1

Texto1= " "

Terminará si...

Terminará si...

Finalizar empalme

No hay errores de sintaxis en este proceso. Puedo ingresar varios números cuando ejecuto el programa, pero cuando ingreso 9999, el programa muestra un error de "desbordamiento".

La razón es que sum yn son variables locales. Cada vez que se presiona una tecla, las variables locales se inicializan a 0, por lo que ocurre el error anterior.

Método de mejora: declarar las variables locales que se cubrirán como variables estáticas o variables de nivel de formulario. La variable a cubrir también se puede declarar como una variable a nivel de formulario en la sección de declaración general.

6. Llamada recursiva "Stack Overflow"

El proceso de función recursiva del factorial es el siguiente:

Public Functionfac (n es un número entero) es un número entero

Si n=1, entonces

fac=1

Otros

fac=n*fac(n-1)

Si... terminará

Finalizar función

Subcomando privado _ Click()' llama a la función recursiva y muestra fac(5)=120.

Imprimir "fac(5)"; Comité de Asuntos Exteriores (5)

Conector final

Cuando se llama al programa principal, cuando el valor de n es 5. Se mostrará un resultado de 120; cuando el valor de n sea -5, se mostrará un mensaje de error de "desbordamiento de espacio de pila".

De hecho, cada vez que se realiza una llamada recursiva, el sistema apilará la información del estado actual (parámetros formales, variables locales, dirección de retorno al final de la llamada) hasta que se alcance la condición final recursiva. En el ejemplo anterior, cuando n=5, los parámetros n-l se llaman recursivamente cada vez hasta que finaliza la llamada recursiva con n=l, y luego los parámetros actuales se extraen de la pila hasta que la pila está vacía. Pero cuando n = -5, el parámetro n-1 es -6, la pila se empuja hacia abajo y luego se llama a n-1 de forma recursiva hasta que la pila está llena y la condición de terminación de n = l nunca se alcanza, lo que resulta en una pila. mensaje de error de desbordamiento.

Entonces, al diseñar un proceso recursivo, se deben considerar las condiciones de terminación, el valor de terminación o una determinada operación en el proceso, y cada vez que se llama a la recursividad, los parámetros deben converger en la dirección de terminación. de lo contrario, se producirá un desbordamiento de la pila.

Análisis de errores comunes y dificultades comunes de control de los verbos intransitivos

1. Falta de nombre del objeto

En programación VB, un error común que cometen los principiantes es Omitir. nombres de objetos, especialmente cuando se utilizan cuadros de lista. Por ejemplo, listl.list(índice de lista) es incorrecto si desea hacer referencia al elemento seleccionado actualmente en un cuadro de lista (Lista1). Incluso si el foco actual está en Listl, VB no cree que Listlndex sea una propiedad de Listl, sino una variable. Entonces el método de referencia correcto es: listl 1 ist(listl . listlndex).

2. La propiedad Columnas del cuadro de lista

La propiedad Columnas del cuadro de lista determina si el cuadro de lista se desplaza horizontal o verticalmente y cómo se muestran los elementos de las columnas. Si se desplaza horizontalmente, la propiedad Columnas determina cuántas columnas se muestran, como se muestra en la Tabla 2.7.2. La Figura 2.7.1 es un cuadro de lista de desplazamiento horizontal de dos columnas.

Mientras el programa se está ejecutando, esta propiedad es de solo lectura, es decir, no puede cambiar un cuadro de lista de varias columnas a un cuadro de lista de una sola columna en tiempo de ejecución, ni puede cambiar un cuadro de lista de una sola columna. cuadro de lista en un cuadro de lista de varias columnas.

Tabla 2.7.2 Atributos de columna del cuadro de lista

Genotipo del número de columna

0 (valor predeterminado) De 1 a n elementos se organizan en una columna, y el cuadro de lista es un desplazamiento vertical de elementos organizados en varias columnas. Complete primero la primera columna, luego la segunda... El cuadro de lista se desplaza horizontalmente y muestra el número especificado de columnas.

3. Validación a nivel de dominio

La validación a nivel de dominio se refiere a la verificación de los datos ingresados ​​en un dominio independiente. El contenido de otros campos del formulario generalmente no se considera durante el proceso. proceso de validación a nivel de dominio. Los momentos apropiados para la validación a nivel de dominio son:

(1) Cuando se ingresan claves en el dominio, están involucrados eventos de teclado (KeyDown, KeyUp y KeyPress).

(2) Cuando un usuario intenta abandonar un dominio, intervienen el atributo CansesValidate y el evento Validate.

(3) Cuando el contenido de un dominio cambia, se produce un evento de cambio.

La propiedad CausesValidation y el evento Validate suelen trabajar juntos.

La propiedad CausesValidate determina si se produce el evento Validate. Si la propiedad CausesValidate del control es False, el evento Validate del control nunca ocurre. Si la propiedad de validación de causa del control es Árbol, cuando el foco intenta moverse a otro control cuya propiedad de Validación de causa es Verdadera (puede decirlo antes de salir), ocurrirá el evento Validar del control original: cuando el foco intenta moverse a otro control cuya causa la propiedad Validar es Verdadera Cuando el control se establece en Falso, el evento Validar del control original no ocurrirá temporalmente. ¿Cuándo ocurrirá? Esto no sucederá hasta que el foco se mueva al control cuya propiedad CausesValidate sea True.

Por ejemplo, supongamos que hay un programa como el que se muestra en la Figura 2.7.2. Cuando el foco intenta pasar del texto 1 al Texto 2, ocurre el evento Validar del texto 1; cuando el foco intenta pasar del Texto 2 al texto 1, ocurre el evento Validar del Texto 2; Cuando el foco intenta pasar del texto 1 al Texto3, el evento Validar del texto 1 no ocurrirá por un tiempo porque CausesValidate de Texto3 es Falso, y luego el evento Validar del texto 1 no ocurrirá hasta que el foco intente moverse al Texto2.

Figura 2.7.2 Propiedades de validación de causas y eventos de validación

Esta característica de la propiedad CausesValidate y el evento Validate se usa a menudo en programas, como se muestra en la Figura 2.7.3. Cuando se ingresan datos no válidos en el cuadro de texto y usted no sabe cómo ingresar datos válidos, los usuarios a menudo elegirán el comando Ayuda para pedir ayuda, o elegirán el comando Cancelar para finalizar la entrada de datos, por lo que no querrán realizar el proceso de verificación. Porque si se ejecuta el proceso de verificación y se encuentran datos no válidos, el usuario no puede elegir ayudar o cancelar y queda atrapado. Ahora, simplemente establezca la propiedad Validar causa del cuadro de texto en Verdadero, la propiedad Validar causa del botón de comando en Falso y coloque el validador en el proceso de validación, y el problema se resuelve. De forma predeterminada, la propiedad CausesValidation de todos los controles es Árbol.

Figura 2.7.3 Propiedades de validación y eventos de validación que conducen a botones de comando

No todos los controles tienen eventos de validación. Sólo los controles que se pueden usar para ingresar datos (como cuadros de texto, casillas de verificación, barras de desplazamiento, etc.) tienen este evento. El proceso del evento de verificación es el siguiente:

Privme Sub object_Validate (cancelar a valor booleano)

<…

Conector final

Entre ellos , cuando el parámetro Cancelar Cuando se establece en Árbol, el foco no abandonará el objeto.

Si desea cambiar la pregunta 1 en el Experimento 7 al evento Validar y al atributo CausesValidation para implementar la validación de datos, debe seguir los siguientes pasos.

Sub txtMath_Validate(Cancelar a booleano)

Si Val(txtMath.text) lt0 o _

Val(txtMath.text)> entonces 100

p>

Cancelar=Verdadero

Terminará si...

Finalizar conector

1. Los elementos del menú en la barra de menú en la parte superior de el formulario es el mismo que Diferencias entre elementos de menú en submenús

La barra de menú en la parte superior del formulario y los elementos de menú en submenús están definidos en el Editor de menús, pero son diferentes.

(1) Los elementos del menú en la barra de menú en la parte superior del formulario no pueden definir teclas de acceso directo, pero los elementos del menú en el submenú pueden tener teclas de acceso directo.

(2) Cuando hay una letra de tecla de acceso rápido ("" en el título del menú) después de la letra, presione la letra de la tecla de acceso rápido Alt para seleccionar el elemento del menú en la barra de menú en la parte superior del formulario, y presione la letra de la tecla de acceso rápido para seleccionar el elemento del menú del submenú (cuando el submenú esté abierto). Cuando el submenú no está abierto, al presionar la letra de la tecla de acceso rápido no se puede seleccionar un elemento del menú.

(3) Aunque todos los elementos del menú pueden responder al evento Click, los elementos del menú en la barra de menú en la parte superior del formulario no necesitan escribir procedimientos de evento.

2. En el programa, la configuración de propiedades del cuadro de diálogo general no funciona.

En el programa, la configuración de propiedades del cuadro de diálogo general no tiene ningún efecto. En la mayoría de los casos, la configuración de propiedades se realiza después de que aparece el cuadro de diálogo. Por ejemplo, el siguiente código de programa tiene tal problema. El método de corrección es colocar la declaración del cuadro de diálogo emergente al final, es decir, poner CommonDialogl. Action=l después de todas las declaraciones de configuración de propiedades.

CommonDialog1. action=1

ConmaonDialog1. Filename="*.Bmp "

CommonDialogl. InitDir="C:\Windows "

CommonDialog1. Filter= "Imágenes(*.Bmp)|*.Bmp|Todos los archivos(*.*)|*.*"

CommonDialog1. FilterIndex=1

3. Se produjo un error de carga al agregar un formulario existente al proyecto.

Al agregar un formulario existente usando el comando "Agregar formulario" en el menú "Proyecto", a menudo ocurren errores de carga. La mayoría de los errores se deben a conflictos de nombres de formulario. Por ejemplo, suponiendo que un proyecto llamado Forml esté actualmente abierto, si desea cargar un formulario Forml que pertenece a otro proyecto, definitivamente obtendrá un error.

[Nota]

La diferencia entre el nombre del formulario y el nombre del archivo del formulario. En un proyecto, puede haber dos formularios con el mismo nombre de archivo de formulario (distribuidos en diferentes carpetas), pero no puede haber dos formularios con el mismo nombre de archivo de formulario al mismo tiempo.

4. Creación de menú en tiempo real

La aplicación crea dinámicamente el menú en tiempo real según sea necesario. En VB, un menú común en tiempo real es el menú "Archivo", que muestra los elementos utilizados recientemente.

Para crear un menú en tiempo real, debe combinar la matriz de control, usar la instrucción Load para crear el elemento del menú y usar UnLoad para borrar el elemento del menú.

Para crear un menú en vivo:

(1) Cree un elemento de menú de muestra en el editor de menú.

La configuración de atributos de los elementos del menú de muestra se muestran en la Tabla 2.8.4. Establecer el índice en 0 indica que el elemento del menú de muestra es un elemento de la matriz de control y su índice es 0. La propiedad Nombre del elemento del menú de muestra es obligatoria y se utilizará como nombre de la matriz de control. Supongamos que la matriz se llama NameArray. Visible se puede establecer en Verdadero o Falso para indicar que el elemento del menú es inicialmente invisible.

Tabla 2.8.4 Elemento de menú de ejemplo de menú en tiempo real

Índice de título de nombre de atributo visible

El valor que debe establecerse no necesita ser 0 FALSO.

(2) Utilice la instrucción Load para crear un elemento de menú en el programa.

Por ejemplo, loadnameray (1) crea un nuevo elemento de menú (el subíndice en la matriz de control es 1), luego establece su propiedad Visible en Verdadero y también establece la propiedad Caption.

Los elementos de menú creados dinámicamente heredan la mayoría de las propiedades excepto Índice, por lo que se deben configurar las propiedades Título y Visible. Además, la posición del elemento del menú de muestra en el sistema de menú determina dónde aparecen los nuevos elementos del menú.

(3) Escribir código para elementos del menú en tiempo real

Cada elemento del menú en tiempo real es miembro de la matriz de control, tiene el mismo nombre y disfruta del proceso del evento.

El siguiente es un ejemplo de código de elemento de menú en vivo:

SubNameArray_Click (índice como número entero)

Seleccionar índice de caso

Caso 0

MsgBox("¡Se hizo clic en NameArmy(0)(elemento de menú de ejemplo)!")

Caso 1

Msgbox("Nameray (1)(realmente se compró primero elemento del menú) ")

Caso 2

Msgbox ("¡Se hizo clic en Nameray (2) (el segundo elemento del menú en tiempo real)!")

Finalizar selección

Finalizar conector

(4) Eliminar elementos del menú en tiempo real

Aunque Visible está configurado en Falso, los elementos del menú en tiempo real no se muestra cuando el programa se está ejecutando, a veces es necesario destruir los elementos del menú en vivo de la memoria. Utilice la instrucción UnLoad para eliminar el menú en vivo. Por ejemplo, loadnamerray(1).

Para obtener detalles sobre cómo crear un menú en vivo, consulte la Sección 4.3 de este tutorial.

5. La propiedad CancelError y el objeto Err del cuadro de diálogo "General"

Cuando la propiedad CancelError del cuadro de diálogo General es Verdadero, siempre que se selecciona el botón "Cancelar", un Error 32755 (cdlCancel), es decir, la propiedad Número de Err se establecerá en 32755.

Err es un objeto del sistema de VB, que registra los errores que ocurren durante la ejecución del programa.

Los atributos importantes del objeto Err son Número (atributo predeterminado) y Descripción. Cuando ocurre un error, el generador de errores almacena el número de error y la descripción del error en las propiedades Número y Descripción respectivamente. Por ejemplo, cuando se selecciona el botón Cancelar en un cuadro de diálogo normal con la propiedad CancelError establecida en Verdadero, se generará un error y las propiedades Número y Descripción del objeto de error se establecerán en 32755 y "Seleccione 'Cancelar'".

A menudo se producen varios errores durante la ejecución del programa. Para obtener detalles sobre el manejo de errores, consulte la Sección 9.6 de este tutorial.

A continuación se explica cómo finalizar el programa cuando se produce un error de cdlCancel.

Subform_ClickO

CommonDialogl. CancelError=True

Ir al controlador de errores en caso de error

CommonDialogl. Action=l

Declaración utilizada para procesar el archivo

Manejador de errores:

Si hay error. Number=cdlCancelThen

End

Endlf

Finalizar conector

6 Eventos relacionados con el formulario

Cuando Un formulario (asumiendo que el formulario no se ha creado en la memoria) se carga en la memoria por primera vez usando la instrucción load, los eventos Inicializar y Cargar ocurren en secuencia. Cuando se usa UnLoad para descargar un formulario de la memoria, los eventos QueryUnLoad y UnLoad ocurren en secuencia, y cuando se usa la instrucción Set form name = Nothing para cancelar la inicialización, ocurre el evento Terminate.

Inicializar es un evento que ocurre cuando se crea un formulario. El evento Inicializar se activa solo una vez en el ciclo de vida del formulario. El usuario puede cargar y eliminar el formulario en la memoria varias veces, pero el formulario solo se crea una vez. En otras palabras, cuando el formulario se carga en la memoria usando la instrucción de carga, se activará el evento Cargar, pero no necesariamente se activará el evento Inicializar.

Después de descargar el formulario con la instrucción unLoad, si el nombre del formulario = Nothing no se usa para cancelar la inicialización, el evento Inicializar no se activará la próxima vez que se use la instrucción Carga; de lo contrario, el evento Inicializar ser activado.

Supongamos que hay dos formularios, formulario 1 y formulario 2, y que tienen los siguientes procedimientos de evento:

Procedimiento de evento de formulario Form

Subform_Click( )

Depurar. El evento "Imprimir" que ocurre cuando el formulario se carga por primera vez en la memoria

Cargando formulario 2

Depuración. El evento "Imprimir" ocurre cuando se usa la descarga para descargar el formulario

Descargar formulario 2

Depuración. El evento "Imprimir" que ocurre cuando el formulario se carga en la memoria por segunda vez

Cargar formulario 2

Depurar. El evento "Imprimir" ocurre cuando se usa la descarga para descargar el formulario

Descargar formulario 2

Depuración. Imprimir "Evento que ocurre al inicializar con la instrucción Establecer nombre del formulario = Nada

Establecer formulario2 = Ninguno

Depurar. Imprimir "Evento que ocurre cuando el formulario se carga en la memoria por tercera vez tiempo (Después de cancelar la inicialización): "

Cargar formulario 2

Conector final

Procedimiento de evento de formulario Form2

Sub Form_Initialize()

Debug.Print "InitializationEvent"

Conector final

Subform_Lond()

Debug Pnnt" Evento de carga. "

Conector final

Sub Form_QueryUnload(Cancelar es entero, UnloadMode es entero)

Imprimir "QueryUnload"

Conector final

Sub Form_Unlond(cancelar a entero)

Debug.Print "descargar"

Conector de terminal

Subform_Terminate()

Debug.Print "Terminado"

Conector final

Cuando el usuario hace clic en Form1, se muestra la siguiente información en la ventana de depuración:

Eventos que ocurren cuando se crea un formulario. transferido por primera vez a la memoria:

Evento de inicialización

Evento de carga

Eventos que ocurren cuando se descarga un formulario usando la descarga:

p>

Descarga de consultas

Dumping

Eventos que ocurren cuando el formulario se carga en la memoria por segunda vez:

Evento de carga

Eventos que ocurren al descargar un formulario usando unload:

QueryUnload

Dumping

Eventos que ocurren al inicializar usando la instrucción Set form name =Nothing:

Finalizado

Eventos que ocurren cuando el formulario se carga en la memoria por tercera vez (después de cancelar la inicialización):

Evento de inicialización

Evento de carga

p>

Los eventos MouseDown, MOUSeUp y C1ick de 7.7.

El evento MouseDown se activa cuando el usuario presiona el botón del mouse en el formulario o control. Sin embargo, debe ocurrir antes de los eventos MouseUp y C1ick. , el orden en que ocurren los eventos MouseUp y Click depende del objeto en el que se hizo clic.

Cuando el usuario hace clic en una etiqueta, cuadro de texto o formulario, la secuencia es:

(1) Ratón abajo

(2) Ratón arriba

(3) Hacer clic

Cuando el usuario hace clic en el botón de comando, la secuencia es:

(1) Presionar el mouse

(2) Hacer clic

(3) Ratón arriba

Cuando el usuario hace doble clic en la etiqueta o cuadro de texto, la secuencia es:

(1) Ratón abajo

(2)Ratón arriba

(3)Hacer clic

(4)DblCUck

(5)Ratón encima

Siete. Análisis de errores y dificultades comunes de archivos

1. Los tres controles del sistema de archivos no se pueden asociar.

Es decir, cuando la unidad cambia, el cuadro de lista del directorio no puede cambiar en consecuencia; o cuando el cuadro de lista del directorio cambia, el cuadro de lista de archivos no puede cambiar en consecuencia. Para asociar tres controles, utilice los siguientes dos procedimientos de eventos:

Private Subdrive_Change()

dir. Camino=tonterías. unidad

EndConnector

Private Subdir_Change()

Archivo. Camino=Dirl. Trail

Conector final

2. ¿Cómo representar el directorio seleccionado actualmente en el cuadro de lista de directorios?

Cuando el programa se esté ejecutando, haga doble clic en un elemento del directorio en el cuadro de lista de directorios, y el elemento del directorio se convertirá en el directorio actual, y el valor de Diirl será. El camino cambiará en consecuencia. El valor de Diirl cuando hace clic para seleccionar un elemento del directorio. El camino no ha cambiado. A veces, para realizar operaciones relacionadas en el elemento del directorio seleccionado, el método correspondiente es seleccionar un elemento de la lista en el control ListBox, que se expresa de la siguiente manera:

Dir. List(Directory.ListIndex)

3. Al abrir un archivo usando el control del sistema de archivos, se muestra un mensaje de error "Archivo no encontrado".

Por ejemplo, la siguiente declaración:

Abra el archivo. archivo de ruta. Ingrese el nombre del archivo #1

Cuando el directorio seleccionado es el directorio raíz, la instrucción anterior se ejecuta correctamente. Cuando el directorio seleccionado es un subdirectorio, se muestra el mensaje de error "Archivo no encontrado" cuando ocurre lo anterior. se ejecuta la declaración.

Entre ellos: Filel. Representa la ruta seleccionada actualmente. El nombre del archivo representa el archivo seleccionado actualmente y juntos representan el identificador del archivo.

Cuando el archivo seleccionado está en el directorio raíz (suponiendo que la unidad sea C), el valor de Filel. La ruta es "C:\1", asumiendo que el nombre del archivo seleccionado es "t1.txt", el valor de Filel. archivo de ruta. El nombre del archivo es "C:\t1.txt".

Cuando el archivo seleccionado está en un subdirectorio (asumiendo que la unidad es C y el subdirectorio es my), el valor de Filel. La ruta es "c:\my", el valor de filel.path filel.filename es "C:\my tl.txt" y falta el separador "\" entre el subdirectorio y el nombre del archivo.

Para garantizar el funcionamiento normal del programa,

la ruta del archivo abierto .filenameforlnput como # 1 se cambia a:

Dun F$$.

Si es correcto(Filel.Path,1)" "Entonces" significa el directorio raíz seleccionado.

F=Filel.Path file.Filename

' De lo contrario ' significa subdirectorio seleccionado y se agrega "\" entre el subdirectorio y el nombre del archivo

F=Filel. El nombre del archivo finalizará si...

Abra F e ingrese. # 1

4. El nombre se establece en 4.

Lo que se abre en la declaración abierta puede ser una constante o una variable de cadena, pero el usuario no tiene un concepto claro, lo que genera el mensaje de error "Archivo no encontrado"

Si el nombre del archivo es "C:\ my\t1.txt",

Las constantes correctas son las siguientes:

Abrir "c:\my\t1.txt" como #1" entrada escritura incorrecta Falta la constante comillas dobles

O la variable correcta se ve así:

Dim F$

F="C:\my\t1.txt "

Abrir F para entrada como #1 'La variable F incorrecta tiene comillas dobles en ambos lados

5. ".

La siguiente declaración:

Abra "C:\my\t1.txt" e ingrese #1

Imprimir F

La entrada Open " C:\my\t1.txt" es #1

Imprimir "2";

Cuando se ejecuta la segunda instrucción Open, aparece el mensaje de error " Se muestra "El archivo se ha abierto".

6. ¿Cómo leer todos los registros en un archivo aleatorio, pero no sabes el número de registro?

Si no lo sabes el número de registro y desea leer todos los registros, siempre que sea similar a Para leer archivos secuenciales, puede usar una estructura de bucle y una declaración Get sin un número de registro. El fragmento del programa es el siguiente:

<. p>Hacer mientras no EOF(1)

Obtener #1,, j

Imprimir j;

Anillo

Al leer. y al escribir archivos aleatorios, no es necesario escribir el número de registro, lo que significa que el siguiente registro se lee automáticamente al leer. Insertar después del registro actual al escribir.