2009-11-04 5 views
5

Ho ereditato un progetto VB6 che ha un modulo con controlli VB (etichetta, ecc.) E controlli comuni di Windows (Treeview, ImageList, ecc.), Che sembra un candidato ideale per un controllo utente.VB6 è stato creato su .NET WinForm?

ho accennato ad un collega la possibilità di compilazione come un controllo ActiveX OCX per essere utilizzato in un progetto NET WinForms. Sono stati un po 'inorriditi a causa dell'esperienza precedente sull'uso di un VB ocx in un progetto C++: tutto andava bene durante la fase di prototipazione ma c'erano problemi di tempo e di aggiornamento quando venivano usati per davvero (molti controlli in una finestra di dialogo, tabulazione tra controlli, disattivazione e attivazione il dialogo, ecc.).

Qualcuno ha esperienza sull'uso di un ocx VB6 creato su un Windows Form .NET? Posso aspettarmi problemi sottili o giocano bene insieme?

+0

+1 Interessante domanda. Sarà particolarmente interessante vedere le risposte relative all'esperienza effettiva dell'uso di un OCX che hanno scritto in VB6 su un modulo .NET. – MarkJ

+0

Mi chiedo se ci sono differenze a seconda della versione di .NET che stai utilizzando. –

risposta

2

avrei tranquillamente andare da NET -> VB 6.0 utilizzando il Interop Forms Toolkit 2.0 da Microsoft proprio per questo scopo. L'ho fatto molte volte. Andare dall'altra parte potrebbe essere doloroso.

Ciò che il vostro collega è preoccupato è molto reale. Il problema che emerge è quale controllo è focalizzato in quale momento e in che modo certi pensieri vengono gestiti sotto il cofano. Un primo esempio di questo è tabulazione tra i controlli.

Si consideri che si dispone di un modulo .NET con alcuni controlli .NET e un VB 6 Active X. Questo ActiveX avrebbe anche i controlli in esso. Ora, come si scheda attraverso il modulo .NET, quando si arriva alla ActiveX si sarebbe poi aspetterebbe alla scheda attraverso tutti i controlli nel ActiveX, ma non fare! Schiaccerai l'intero controllo ActiveX in una sola volta. Questo è un problema.

Ora, se si sta andando in senso contrario, .NET in VB 6.0, è necessario gestire questo comportamento nel codice. Questo CodeProject article ha una classe eccellente chiamata ActiveXHelpers che fa proprio questo. Ma fondamentalmente si tratta di gestire manualmente l'evento KeyPressed, controllando una scheda o shift + tab e mettendo a fuoco manualmente il controllo successivo/precedente.

Ora nella situazione è necessario modificare il codice VB 6 per comportarsi in questo modo. Molto probabilmente sarà meno fatica a riscrivere il controllo in .NET. Non ho mai avuto problemi di aggiornamento, ma come ho detto sono andato solo su .NET -> VB non il contrario. In entrambi i casi è probabile che ci sia molto dolore e molto probabilmente avrai altri problemi, come ad esempio l'affondamento degli eventi e la differenza tra progettazione e runtime in VB.

1

Purtroppo ho solo una mezza risposta. Usiamo un singolo controllo OCX VB6 su un modulo .NET e funziona senza problemi. Non è utilizzato con nessun altro controllo .NET o OCX su tale modulo. Fornisce una vista specializzata in un database.

0

Nella nostra suite di software abbiamo abbastanza il mix di VB6 e .NET. Utilizziamo un numero di controlli ActiveX creati con VB6 in entrambe le applicazioni VB.NET e C#. Per la maggior parte, funziona sorprendentemente bene.

Il più grande mal di testa che abbiamo è che quando la versione dei controlli VB6 cambia, dobbiamo aggiungere nuovamente i riferimenti nei progetti .NET. Sembra che le librerie di interoperabilità .NET siano legate a una versione specifica del controllo e non possano rigenerare l'interoperabilità per una nuova versione senza rimuovere gli interp dal progetto e ricrearli. Un po 'di dolore, ma ho trovato modi per farlo, quindi non devo rimuovere e ricreare tutte le istanze dei controlli.