Form padre MDI, shortcut non funzionano coi figli

lunedì 23 febbraio 2009 - 18.09

joeputrisino Profilo | Junior Member

Ciao a tutti, volevo chiedervi se per caso vi è mai capitato una situazione di queste; se aprite il Visual Basic 2005 e create un progettino semplice con un form dove mettete un oggetto textbox, se lo fate rullare vedrete che la combinazione dei tasti come il copia da tastiera ---->"Ctrl" + "C" o incolla e gli altri, funzionano. Se invece nel progetto ci mettete un Form Mdi che contiene il primo e quindi lo rendete figlio, lo stesso Form alla partenza perde gli shortcut. Potete fare copia, taglia ed incolla solo col tasto destro del mouse. Vi è mai capitato? Sto cercando su internet come risolvere questo problema stupido che non capisco. Ho guardato nelle proprietà del main ma non sono riuscito a trovare nulla che mi potesse aiutare. Ciao e fatemi sapere se mi drogo oppure capita pure a voi sto problema. ;)

Io lancio il form figlio in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ovviamente "Me" è il Form padre MDI
grazie sempre per la vostra attenzione.

Maurizio Maccarrone
Enyasoftware srl

Jeremy Profilo | Guru

Ciao joeputrisino
Ho provato a riprodurre l'anomalia che lamenti ma senza risultato ..... a me funziona.
Potresti dare più informazioni sullo scenario?

Facci sapere...
Ciao

joeputrisino Profilo | Junior Member

ciao e grazie per la risposta, è semplice se crei un progetto nuovo con un singolo form e ci metti un oggetto textbox e lo fai partire, "Ctrl" + C per il copia e gli altri shortcut funzionano tranqullamente. Se a questo progetto gli aggiungi un Form Padre MDI ed il form di prima lo rendi figlio chimandolo dal Menustrip all'avvio, succede che gli shortcut non mi funzionano più. Tra l'altro succede pure ad un mio collega che lavora a Milano. Lui programma in C# Visual Studio 2005, quindi a quanto pare non è un problema della mia macchina. Spero di essere stato chiaro. Fammi sapere se a te non succede ciao e grazie anora
Maurizio Maccarrone
Enyasoftware srl

Jeremy Profilo | Guru

Ciao joeputrisino
Ti confermo l'anomalia anche con Vs2008 ... solo se sviluppo in ambiente C#(in VB funziona benissimo).
Il motivo, non saprei ...... Potresti comunque ovviare al problema...usando My.Computer.ClipBoard e i relativi metodi per copia incolla di appunti.

Facci sapere...
Ciao

joeputrisino Profilo | Junior Member

Ok grazie per la conferma. Come mai ci siano delle fregnacce così nel visual studio 2005 non lo capisco proprio, anche perchè passi ore o giornate per risolvere problematiche che non dovrebbero esistere. Cmq ho già implementato del codice sull'evanto KeyUp per intercettare la combinazione "Ctrl" + C,Z,X e V. Solo che me lo devo riportare per ogni textbox e questo mi scoccia. In un'altro post sempre aperto da me dal titolo "TextBox Custom Controlli" chiedevo come poter personalizzare la funzione del disabilita del textbox, cosa che ho risolto ma non riesco a cancellare il post, in caso fatelo voi. Cercherò sempre nella personalizzazione di quest'utlimo di implementare una funzione per gli shortcut in caso la faccio ve la post se vi interessa. Tu mi suggerivi di usare la classe "My.Computer.Clipboard", dunque lo farò e grazie per la dritta. Se ho capito bene questa anomalia non esiste per visaul Studio 2008, meglio così vuol dire che sistemano le fregnacce che lasciano con le altre verisioni.
Maurizio Maccarrone
Enyasoftware srl

Jeremy Profilo | Guru

Ciao joeputrisino
>Solo che me lo devo riportare per ogni textbox e questo mi scoccia
Potresti aggiungere un gestore di evento a runtime tranquillamente facendo un for each e indirizzare l'evento KeyUp ad una tua sub(in modo da non dover scrivere il codice per ogni textbox).
Adesso non ho molto tempo se ti interessa il discorso .... facci sapere.....
Ciao.

joeputrisino Profilo | Junior Member

Si che mi interessa, quando hai tempo postami qualcosa che lo vedrò. grazie ancora per il tuo interessamento. Intanto ho risolto così, all'evento KeyUp del Form mi identifico il controllo attivo e se è un oggetto textbox attivo gli shortcut. Se pensi che ci sia un via + pulita, fammi sapere. Lo ripeterò in ogni Form una volta sola per adesso.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Maurizio Maccarrone
Enyasoftware srl

Jeremy Profilo | Guru

Ciao Maurizio
Ti posto quello che avrei scritto io
Private Sub Formciao_load() Handles Me.Load for each cnt as control in me.controls if typeof(cnt) is textbox then addhandler cnt.keyup,addressof copiaincolla endif next End Sub Private sub CopiaIncolla(byval sender as object,byval e as system.windows.worms.KeyEventArgs) If e.Control = True Then text= directcast(sender,textbox).text Select Case e.KeyValue Case 90 'Control + Z text.Undo() Case 67 'Control + C text.Copy() Case 86 'Control + V text.Paste() Case 88 'Control + X text.Cut() End Select End If End Sub
Eventualmente(nel caso ne avessi bisogno) alle spiegazioni ci pensiamo dopo

Poi, invece di usare KeyValue, se usi KeyCode, hai a disposizione un enumeratore con la rappresentazione simbolica dei valori di KeyValue

Facci sapere....
Ciao

joeputrisino Profilo | Junior Member

Hai ragione, in questa maniera mi faccio una sub pubblica nel modulo e me lo chiamo nel form load. Mi è piaciuta! ;)
Grazie, solo che per il tuo codice col Visual Basic 2005 c'era qualcosa da sistemare a livello di semantica per la sub ma tutto a posto a presto e grazie come sempre
Maurizio Maccarrone
Enyasoftware srl
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5