2009-12-30 47 views
7

abbiamo sviluppato un'applicazione utilizzando vb6.0 e SQL server 2000 alcuni anni fa. Di recente, alcuni dei nostri clienti ci dicono che durante l'esecuzione dell'applicazione, su alcuni computer che utilizzano Winxp sp2 come O/S, ricevono il seguente errore quando vogliono mostrare il modulo di ricerca:Che cosa causa questo errore? "Errore di runtime 380: valore di proprietà non valido"

"Errore di runtime 380: valore di proprietà non valido "

Che cosa causa questo errore?

+0

Come molti altri commenti indicano. La più grande fonte di questo problema che ho visto manca font. Nel mio caso Small Fonts e Sans Serif mancavano da Windows 10. – wizebin

risposta

8

Suppongo che l'applicazione utilizzi una casella di modifica mascherata? Questo è un problema relativamente ben conosciuta, documentata da Microsoft qui:

http://support.microsoft.com/kb/177088

L'articolo si riferisce alle VB4 e 5, ma sono abbastanza sicuro che lo stesso vale per VB6.

EDIT

Su ulteriori ricerche, mi sto trovando i riferimenti a questo problema con altri controlli pure. Ricompilare la tua applicazione su Windows XP per gli utenti che eseguono XP probabilmente produrranno una versione funzionante, anche se non è una soluzione ideale ...

+0

David, Ho controllato i suoi controlli MaskEditBox. Bene, ho visto 4 MaskEditBoxes nel modulo di ricerca, ma sfortunatamente, la loro proprietà visibile era vera in fase di progettazione. – odiseh

+4

Questo errore non si verifica solo a causa di errori nei controlli Microsoft. Si verifica anche quando si commette un errore di programmazione e si imposta accidentalmente una proprietà su un valore non valido. Qualcosa di diverso sulle macchine degli utenti sta causando un comportamento diverso, ad es. Temi di Windows o diversa configurazione dell'applicazione. – MarkJ

5

Quali sono le cause runtime error 380? Tentativo di impostare una proprietà di un oggetto o controllo su un valore non consentito. Controlla il codice che viene eseguito quando viene caricato il modulo di ricerca (Form_Load ecc.) Per qualsiasi codice che imposta una proprietà su qualcosa che dipende dai valori di runtime.

Il mio altro consiglio è di aggiungere un po 'di gestione degli errori e qualche registrazione per rintracciare la linea esatta che sta causando l'errore.

  • Logging dichiarazioni Cospargere attraverso il codice che dicono "Got to X", "Got a Y", ecc Usateli per trovare l'esatta posizione dell'errore. È possibile scrivere su un file di testo o su event log o utilizzare OutputDebugString.
  • Gestione errori Ecco come ottenere un errore stack trace. Aggiungi un gestore di errori a tutte le routine che potrebbero essere coinvolte, come questo codice qui sotto. Lo strumento gratuito essenziale MZTools può farlo automaticamente. Puoi anche usare Erl per segnalare i numeri di linea e trovare la linea esatta - MZTools può automaticamente mettere in linea i numeri per te.

_

On Error Goto Handler 
    <routine contents> 
Handler: 
    Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description 
+0

Mark, It's Vb6.0 :(Non c'è modo di ottenere l'esatto line hat causando l'errore – odiseh

+2

@odiseh Non rinunciare ancora, ci sono dozzine di modi per ottenere la riga esatta che causa l'errore. Ho caricato la mia risposta con alcuni suggerimenti: – MarkJ

+2

@odiseh: se aggiungi numeri di linea al tuo codice, Erl restituirà il numero di riga in cui si è verificato l'errore. – jac

7

solo per gettare i miei due centesimi in: un'altra causa comune di questo errore nella mia esperienza è codice nell'evento Form_Resize che utilizza la matematica per ridimensionare controlli di una maschera. dimensioni di controllo (Height e Width) non possono essere impostati a valori negativi, così come il codice seguente nel evento Form_Resize possono causare questo errore:

Private Sub Form_Resize() 
    'Resize text box to fit the form, with a margin of 1000 twips on the right.' 
    'This will error out if the width of the Form drops below 1000 twips.' 
    txtFirstName.Width = Me.Width - 1000 
End Sub 

Il suddetto codice genererà un errore "valore di proprietà non valido" se il modulo viene ridimensionato a meno di 1000 twip di larghezza. Se questo è il problema, la soluzione più semplice è aggiungere On Error Resume Next come prima riga, in modo che questi tipi di errori vengano ignorati. Questa è una di quelle rare situazioni in VB6 dove On Error Resume Next è tuo amico.

0

Sembra che le risposte sopra siano per quando si scrive e si compila un programma, ma sto utilizzando il software di un venditore, Catalog.exe, parte del catalogo di schede Voyager di "Ex Libris" e visualizzo l'errore come bene:

catalog-error.png http://img805.imageshack.us/img805/8275/catalogerror.png

ho due 7 macchine Windows a 32 bit. Il più recente mi sta dando l'errore, ma su quello più vecchio funziona bene. Ho fatto molte ricerche con Google e qui ci sono alcune delle cose che ho trovato che le persone stanno dicendo relative a questo problema. Forse una di queste cose vi aiuterà correggere l'errore per voi, anche se non ha funzionato per me:

da ciò che gli altri hanno da dire (come David M) penso che potrebbe essere correlato al MSVBM60.DLL libreria - ma sembra che su entrambi i miei computer questo file sia esattamente lo stesso (stessa versione, dimensione, data, ecc.).

Poiché quel file non era diverso, ho cercato di trovare quali altri file (dll) l'applicazione poteva usare, così ho lanciato Process Explorer by Sysinternals e ho dato un'occhiata all'applicazione (si carica e poi si blocca quando glielo dici " connect "), e gli screenshot qui sotto sono ciò che ho trovato.

screen1.png http://img195.imageshack.us/img195/2231/screen1oo.png

screen2.png http://img88.imageshack.us/img88/2153/screen2ao.png

screen3.png http://img337.imageshack.us/img337/7622/screen3qk.png

Ora, io non sono un programmatore/VB di Windows, solo un utente di alimentazione, e così sto alla fine della mia conoscenza per ciò che fare. Ho parlato con il fornitore del software e loro raccomandano di reinstallare Windows. Probabilmente funzionerà, ma mi dà fastidio il fatto che questo programma possa girare su Windows 7, ma qualcosa su questo particolare sistema sta causando errori. Infine, questa è un'immagine che è già stata distribuita su più macchine e quindi, mentre reinstallare Windows una volta non è un grosso problema, mi farebbe risparmiare tempo se riuscissi a trovare una soluzione o una soluzione alternativa.

+0

mark, Spiacente di essere negativo a un nuovo (ish) ma questo sito è rivolto ai programmatori per fare domande di programmazione.Potresti ottenere una risposta migliore su [SuperUser] (http://superuser.com/). Inoltre, stai facendo una domanda invece di pubblicare una risposta, tutto il che significa che questo deve essere contrassegnato per la rimozione. Detto questo, ci si è ovviamente sforzato molto, quindi posso suggerire di modificare/copiare tutto e postare come nuovo Q su SuperUser (o anche qui su SO se penso che conforni con la programmazione) – Basic

+0

Per inciso , avendo letto la tua Q in pieno, vale la pena notare che Windows memorizza diverse versioni della stessa DLL nella cartella 'Windows \ WinSxS' (Windows side-by-side), quindi è abbastanza probabile che stia effettivamente presentando diverse versioni di DLL all'app. – Basic

+0

@Basic: buoni punti. Ho apportato delle modifiche in modo che questa sia una risposta. Mi rendo conto che SO è generalmente per domande di programmazione, ma penso che con oltre 20k visualizzazioni alcune persone che stanno trovando questa domanda (Che cosa causa questo errore? "Errore di runtime 380: valore di proprietà non valido") non stanno guardando perché sono programmatori VB in modo che sarebbe utile per gli altri se questa risposta rimanesse in giro. Grazie per la nota su 'Windows \ WinSxS' - darò un'occhiata a questo! :) – mark

0

Penso che, in sostanza, il problema risieda nel fatto, in quanto a quale versione degli O/S è stato compilato il programma e in base a quale versione degli O/S state eseguendo il programma. Ho visto molti file dll e ocx aggiornati che causano errori simili, specialmente quando il programma è stato compilato con una versione precedente dei file dll e ocx e durante la configurazione vengono mantenuti gli ultimi file dll e ocx.

+0

Questo non è corretto. –

0

Se si scrive software, o si utilizza software scritto, che memorizza le coordinate della finestra del programma o le dimensioni per essere riutilizzati all'avvio di un programma, controllare lì eventuali occorrenze (s) di tali dimensioni e posizioni che causerebbero questo. L'ho visto più e più volte da vari produttori producendo pigramente codice che ridimensiona e riposiziona i controlli su una "forma" (una finestra del programma) basata sulla dimensione di tale modulo. Cerca in HKLM \ Software \ Vendor \ Program e HKCU \ Software \ Vendor \ Program. Cerca chiavi specifiche che potrebbero essere offensive. Una volta avevo un archivio di programmi -48000 per la posizione della finestra del programma in tasti chiamati WindowsPosX e WindowPosY. Si poteva vedere il programma avviato e in esecuzione sulla barra delle applicazioni ma poiché la finestra del programma stessa era inferiore a 48000 (il valore assoluto di -48000), era posizionata completamente fuori dallo schermo. Se non ti senti a tuo agio con la modifica delle informazioni regstry - la maggior parte delle persone non lo sono - quindi disinstallare il software, utilizzare un pulitore di registro per rimuovere le voci rimanenti, quindi reinstallare il software e vedere se questo non risolve il problema.

0

Potrebbe essere che si sta individuando nella schermata un controllo (etichetta, cornice, testo ..) fuori dai bordi dello schermo. Se la posizione di un controllo dipende da qualsiasi variabile e tale variabile non è definita correttamente all'avvio, è possibile che si disponga di questo messaggio di errore.

Potrebbe avere una diversa risoluzione dello schermo in entrambi i computer. E quella potrebbe essere la ragione.

al fine di trovare il bug del programma, mettere questa linea in tutti i sottotitoli: On Error Resume Next

se questo risolve il problema, è necessario cancellare questa linea in ogni sub, uno per uno, e verificando se il problema ritorna. Quando il problema ritorna dopo aver rimosso questa linea in un sub concreto, si conoscerà la subroutine che memorizza il bug. Cerca lì e lo troverai.

[email protected]

0

Molte cose veramente stupide possono causare questo errore. Quello che ho incontrato è un font non più incluso in Windows 8 per impostazione predefinita - Courier New. L'applicazione VB6 aveva il suo nome hard-coded in una delle forme, quindi il messaggio all'avvio.

1

Vecchio thread, ma ecco una risposta.

font problematico con voyager

cioè. se installi alcune suite di corel, elimina alcune opzioni di lingua. Scaviamo questo con il monitor di processo e abbiamo trovato il motivo, con noi erano questi due file di font.

DFKai71.ttf dfmw5.ttf

Abbiamo avuto lo stesso problema ed è stato risolto rimuovendo questi due file di font da windows \ cartella dei font.

0

Una ragione per questo errore è un errore molto stupido nel codice. Se il valore corretto non viene passato a una proprietà di ActiveX, viene generato anche questo errore.

Come il valore vuoto viene passato alla proprietà Font.Name o il valore di testo viene passato alla proprietà Height.

0

2017 Lo so ... ma qualcuno si trova ad affrontare questo problema durante la manutenzione del codice.

Questo errore è accaduto quando ho provato:

maskedbox.Mask = "#.###" 
maskedbox.Text = "12345678" 

Per rimediare, basta impostare la proprietà PromptInclude su "false".

-3

errore 380 windows 7 soluzione molto semplice basta controllare l'ora della data & impostazioni regionali fare loro corretto.