none
taglia copia incolla....come fare??? RRS feed

  • Domanda

  • Ciao a tutti,

    Su una form frmMain ho una menu MenuStrip e sotto la voce edit ovviamente ciò le tre voci taglia copia incolla con relatice shortcut impostate.. Su questa form ho una serire di textbox, label numeriupdown...principalmente vorrei che quando io seleziono qualcosa con il mouse che sia dentro all textbox o che sia una label e premo una shortcut o relativo bottone mi faccia quello che dovrebbe fare...Qui arriva il problema...come posso impostare questo?su che evento comune di tutti questi componenti? Se qualcosa non è chiaro non esitate a chiedere...

    vi ringrazio in anticipo...Io utilizzo Visual Basic 2010

    martedì 18 ottobre 2011 11:52

Risposte

  • Ciao Destroyer1090,

    arrivo a questo punto

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click

    For Each myControl As Control In Me.gbxPrincipalFunction.Controls
       If myControl.GetType.Name = "TextBox" Then
           Dim Box = CType(sender, TextBox)----->'questo non è corretto ma cosa posso fare per dargli latextbox con il focus?
           Box.Copy()
       End If

    Next

    end sub


    se ho ben capito hai uno splitcontainer con all'interno quattro controli GroupBox.

    Devi eseguire intanto un controllo della proprietà Controls dello splitcontainer, se sul pannello uno o due , verificando  se i controlli sono di tipo groupBox.

    Effettuato questo riesegui effettuando un altro ciclo foreach annidato al primo ,per verificare se i groupBox contengono al loro interno deli controlli textbox , una cosa di questo tipo.

     For Each myControl As Control In Me.SplitContainer1.Panel2.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each myTextBox As Control In myControl.Controls
                        If TypeOf (myTextBox) Is TextBox Then
                            'MIO CODICE                        
                        End If
                    Next
                End If
            Next
    

    Questo esempio esegue il controllo sul panel2 di destra del controllo SplitContainer , e successivamente un altra iterazione per verificare se all'interno dei controlli groupBox vi sono delle caselle di testo.

    Ciao 


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 14:43
  • Il codice alla fine viene fuori così

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            For Each myControl As Control In Me.splContainer.Panel1.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each Mygrx As Control In myControl.Controls
                        If TypeOf (Mygrx) Is GroupBox Then
                            For Each Mytxt As Control In Mygrx.Controls
                                If (TypeOf (Mytxt) Is TextBox) And (Mytxt.Focused.Equals(True)) Then
                                    Dim Box = CType(Mytxt, TextBox)
                                    Box.Copy()
                                End If
                            Next
                        ElseIf (TypeOf (Mygrx) Is TextBox) And (Mygrx.Focused.Equals(True)) Then
                            Dim Box = CType(Mygrx, TextBox)
                            Box.Copy()
                        End If
                    Next
                End If
            Next
        End Sub
    
    Ovviamente questa è la funzione copia ma per fare taglia incolla basta solo modificare Box.copy con box.paste e box.cut!

    • Contrassegnato come risposta X-SL4UGHT3R mercoledì 19 ottobre 2011 06:59
    mercoledì 19 ottobre 2011 06:59
  • Il codice alla fine viene fuori così

     

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            For Each myControl As Control In Me.splContainer.Panel1.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each Mygrx As Control In myControl.Controls
                        If TypeOf (Mygrx) Is GroupBox Then
                            For Each Mytxt As Control In Mygrx.Controls
                                If (TypeOf (Mytxt) Is TextBox) And (Mytxt.Focused.Equals(True)) Then
                                    Dim Box = CType(Mytxt, TextBox)
                                    Box.Copy()
                                End If
                            Next
                        ElseIf (TypeOf (Mygrx) Is TextBox) And (Mygrx.Focused.Equals(True)) Then
                            Dim Box = CType(Mygrx, TextBox)
                            Box.Copy()
                        End If
                    Next
                End If
            Next
        End Sub
    
    Ovviamente questa è la funzione copia ma per fare taglia incolla basta solo modificare Box.copy con box.paste e box.cut!

     

    Per farlo più iniversale ho fatto una bella ricorsione!

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            CopiaRic(Me.splContainer.Panel1)
        End Sub
    
    Private Sub CopiaRic(ByVal Ogg As Control)
            For Each myControl As Control In Ogg.Controls
                If (TypeOf (myControl) Is TextBox) And (myControl.Focused.Equals(True)) Then
                    Dim Box = CType(myControl, TextBox)
                    Box.Copy()
                Else
                    CopiaRic(myControl)
                End If
            Next
        End Sub
    


    • Contrassegnato come risposta X-SL4UGHT3R mercoledì 19 ottobre 2011 07:07
    mercoledì 19 ottobre 2011 07:07

Tutte le risposte

  • Ciao, mi sembra un pò complesso.... e questa complessità aumenta all'aumentare del numero e del tipo dei controlli utilizzati nel form. Dovresti pianificare un attimino....

    Prendiamo in considerazione ad esempio la sola funzione copia richiamabile da un menu. Dovrebbe sapere in sostannza cosa copiare, e questo 'cosa' nella maggior parte dei casi dovrebbe corrispondere a  proprietà di oggetti.

    Quindi è da implementare una procedura (sub o function) che reagisca alla scelta di menu (copia) , ma che sappia anche cosa copiare.

    Non so se ho capito bene....

     


    mario formosa
    martedì 18 ottobre 2011 12:09

  • Ciao, mi sembra un pò complesso.... e questa complessità aumenta all'aumentare del numero e del tipo dei controlli utilizzati nel form. Dovresti pianificare un attimino....

    Prendiamo in considerazione ad esempio la sola funzione copia richiamabile da un menu. Dovrebbe sapere in sostannza cosa copiare, e questo 'cosa' nella maggior parte dei casi dovrebbe corrispondere a  proprietà di oggetti.

    Quindi è da implementare una procedura (sub o function) che reagisca alla scelta di menu (copia) , ma che sappia anche cosa copiare.

    Non so se ho capito bene....

     


    mario formosa

    Quello che deve copiare in sostanza è sempre e solo testo!ti faccio un esempio...L'immagine che vedi sotto è una parte della mia applicazione...quello che dovrebbe fare il copia,taglia ed incolla principlmente riguarderebbe le textbox per velocizzare l'inserimento dei dati nel caso fossero uguali...spero di averti chiarito le idee..

    martedì 18 ottobre 2011 12:27
  • Ciao Destroyer1090,

    Ciao a tutti,

    Su una form frmMain ho una menu MenuStrip e sotto la voce edit ovviamente ciò le tre voci taglia copia incolla con relatice shortcut impostate.. Su questa form ho una serire di textbox, label numeriupdown...principalmente vorrei che quando io seleziono qualcosa con il mouse che sia dentro all textbox o che sia una label e premo una shortcut o relativo bottone mi faccia quello che dovrebbe fare...Qui arriva il problema...come posso impostare questo?su che evento comune di tutti questi componenti? Se qualcosa non è chiaro non esitate a chiedere...

    vi ringrazio in anticipo...Io utilizzo Visual Basic 2010

    non so se ho capito, se devi eseguire dei comandi dal menustrip , per quanto riguarda i controlli TextBox puoi recuperare il testo al suo interno con i metodi Copy e Cut, per incollare gestisci il metodo Paste.

    Questi metodi non sono previsti per gli altri controlli da te chiesti.

    Diversamente per copiare il testo negli appunti di sistema hai a disposizione anche la la Classe Clipboard.

    http://msdn.microsoft.com/it-it/library/system.windows.forms.clipboard.aspx

    Ciao.


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 12:31
  • Ciao Destroyer1090,

    Ciao a tutti,

    Su una form frmMain ho una menu MenuStrip e sotto la voce edit ovviamente ciò le tre voci taglia copia incolla con relatice shortcut impostate.. Su questa form ho una serire di textbox, label numeriupdown...principalmente vorrei che quando io seleziono qualcosa con il mouse che sia dentro all textbox o che sia una label e premo una shortcut o relativo bottone mi faccia quello che dovrebbe fare...Qui arriva il problema...come posso impostare questo?su che evento comune di tutti questi componenti? Se qualcosa non è chiaro non esitate a chiedere...

    vi ringrazio in anticipo...Io utilizzo Visual Basic 2010

    non so se ho capito, se devi eseguire dei comandi dal menustrip , per quanto riguarda i controlli TextBox puoi recuperare il testo al suo interno con i metodi Copy e Cut, per incollare gestisci il metodo Paste.

    Questi metodi non sono previsti per gli altri controlli da te chiesti.

    Diversamente per copiare il testo negli appunti ha a disposizione la Classe Clipboard.

    http://msdn.microsoft.com/it-it/library/system.windows.forms.clipboard.aspx

    Ciao.


    Carmelo La Monica Blog http://community.visual-basic.it/carmelolamonica/ WordPress http://carmelolamonica.wordpress.com/ Twitter http://twitter.com/carmelolamonica
    ok...il punto è che quando faccio taglia o copia devo andare a vedere prima dov'è posizionato il focus per poi memorizzare la parte selezionata (e cancellarla nel caso del cut) e successivamente con il paste vedere dove incollarla...questa è la parte che non saprei come fare...come verifico questa cosa?
    martedì 18 ottobre 2011 12:33
  • Puoi gestire la clipboard tramite la classe Clipboard (http://msdn.microsoft.com/it-it/library/system.windows.forms.clipboard.aspx).
    Inoltre la classe TextBoxBase di Windows Form dispone dei metodi Cut e Copy.

    martedì 18 ottobre 2011 13:25
    Moderatore
  • Ciao Destroyer1090,

    Ok il punto è che quando faccio taglia o copia devo andare a vedere prima dov'è posizionato il focus per poi memorizzare la parte selezionata (e cancellarla nel caso del cut) e successivamente con il paste vedere dove incollarla...questa è la parte che non saprei come fare...come verifico questa cosa?


    se intendi verificare in quel momento in che casella di testo sei , puoi utilizzare la proprietà Focused del controllo TextBox, verifichi se true esegui il copia, taglia o incolla a seconda di ciò che intendi.

    Private Sub Copia()

    If Me.TextBox1.Focused.Equals(True) Then

    ' il tuo codice

    End If

    End Sub 

    Lo gestisci per tutti i tre metodi che chiami per esempio Copia , Taglie e Incolla.

    Ciao.


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 13:35
  • Ciao Destroyer1090,

    Ok il punto è che quando faccio taglia o copia devo andare a vedere prima dov'è posizionato il focus per poi memorizzare la parte selezionata (e cancellarla nel caso del cut) e successivamente con il paste vedere dove incollarla...questa è la parte che non saprei come fare...come verifico questa cosa?


    se intendi verificare in quel momento in che casella di testo sei , puoi utilizzare la proprietà Focused del controllo TextBox, verifichi se true esegui il copia, taglia o incolla a seconda di ciò che intendi.

    Private Sub Copia()

    If Me.TextBox1.Focused.Equals(True) Then

    ' il tuo codice

    End If

    End Sub 

    Lo gestisci per tutti i tre metodi che chiami per esempio Copia , Taglie e Incolla.

    Ciao.


    Carmelo La Monica

     

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    dai che ci siamo...:-) l'idea è molto buona...ora però problema di ottimizzazione....queste textbox sono dentro a delle groupbox che sono dentro a un container...io pensavo di utilizzare questo codice

            For Each myControl As Control In Me.Controls
                If myControl.GetType.Name = "TextBox" Then
                   'MIO CODICE
                End If
            Next

    solo che mi vede solo i container e il menu....c'è un modo per fargli controllare tutto "in cascata" invece di sostitutire me.controls con tutte le groubbox dove utilizzo le textbox??

    martedì 18 ottobre 2011 14:20
  • Ciao Destroyer1090,

    dai che ci siamo...:-) l'idea è molto buona...ora però problema di ottimizzazione....queste textbox sono dentro a delle groupbox che sono dentro a un container...io pensavo di utilizzare questo codice

            For Each myControl As Control In Me.Controls
                If myControl.GetType.Name = "TextBox" Then
                   'MIO CODICE
                End If
            Next

    solo che mi vede solo i container e il menu....c'è un modo per fargli controllare tutto "in cascata" invece di sostitutire me.controls con tutte le groubbox dove utilizzo le textbox??

    se sono all'interno di un groupBox devi aggiungerlo al codice. 

    For Each myControl As Control In Me.GroupBox1.Controls
                If TypeOf (myControl) Is TextBox Then
                    'MIO CODICE
                End If
            Next

    Utilizza il typeOf invece di GetType

    Ciao


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 14:23
  • arrivo a questo punto

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click

    For Each myControl As Control In Me.gbxPrincipalFunction.Controls
       If myControl.GetType.Name = "TextBox" Then
           Dim Box = CType(sender, TextBox)----->'questo non è corretto ma cosa posso fare per dargli latextbox con il focus?
           Box.Copy()
       End If

    Next

    end sub

    • Modificato X-SL4UGHT3R martedì 18 ottobre 2011 14:36
    martedì 18 ottobre 2011 14:28
  • Ciao Destroyer1090,

    arrivo a questo punto

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click

    For Each myControl As Control In Me.gbxPrincipalFunction.Controls
       If myControl.GetType.Name = "TextBox" Then
           Dim Box = CType(sender, TextBox)----->'questo non è corretto ma cosa posso fare per dargli latextbox con il focus?
           Box.Copy()
       End If

    Next

    end sub


    se ho ben capito hai uno splitcontainer con all'interno quattro controli GroupBox.

    Devi eseguire intanto un controllo della proprietà Controls dello splitcontainer, se sul pannello uno o due , verificando  se i controlli sono di tipo groupBox.

    Effettuato questo riesegui effettuando un altro ciclo foreach annidato al primo ,per verificare se i groupBox contengono al loro interno deli controlli textbox , una cosa di questo tipo.

     For Each myControl As Control In Me.SplitContainer1.Panel2.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each myTextBox As Control In myControl.Controls
                        If TypeOf (myTextBox) Is TextBox Then
                            'MIO CODICE                        
                        End If
                    Next
                End If
            Next
    

    Questo esempio esegue il controllo sul panel2 di destra del controllo SplitContainer , e successivamente un altra iterazione per verificare se all'interno dei controlli groupBox vi sono delle caselle di testo.

    Ciao 


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 14:43
  • Ciao Destroyer1090,

    ma la groupbox non erano all'intermo di uno splitcontainer?.

    Ciao


    Carmelo La Monica

    Blog http://community.visual-basic.it/carmelolamonica/

    WordPress http://carmelolamonica.wordpress.com/

    Twitter  http://twitter.com/carmelolamonica

    martedì 18 ottobre 2011 14:47
  • Scusa ma non puoi adattare la funzione che ti avevo proposto nel thread http://social.msdn.microsoft.com/Forums/it-IT/visualbasicit/thread/4d4657c1-ac01-45b1-9a1e-1754369fc8e3 per fargli recuperare tutti i controlli di un certo tipo anzichè per un certo nome?

    Anzichè controllare il nome dovresti controllare il tipo e tornare una lista anzichè un singolo oggetto.

    martedì 18 ottobre 2011 14:48
    Moderatore
  • Il codice alla fine viene fuori così

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            For Each myControl As Control In Me.splContainer.Panel1.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each Mygrx As Control In myControl.Controls
                        If TypeOf (Mygrx) Is GroupBox Then
                            For Each Mytxt As Control In Mygrx.Controls
                                If (TypeOf (Mytxt) Is TextBox) And (Mytxt.Focused.Equals(True)) Then
                                    Dim Box = CType(Mytxt, TextBox)
                                    Box.Copy()
                                End If
                            Next
                        ElseIf (TypeOf (Mygrx) Is TextBox) And (Mygrx.Focused.Equals(True)) Then
                            Dim Box = CType(Mygrx, TextBox)
                            Box.Copy()
                        End If
                    Next
                End If
            Next
        End Sub
    
    Ovviamente questa è la funzione copia ma per fare taglia incolla basta solo modificare Box.copy con box.paste e box.cut!

    • Contrassegnato come risposta X-SL4UGHT3R mercoledì 19 ottobre 2011 06:59
    mercoledì 19 ottobre 2011 06:59
  • Il codice alla fine viene fuori così

     

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            For Each myControl As Control In Me.splContainer.Panel1.Controls
                If TypeOf (myControl) Is GroupBox Then
                    For Each Mygrx As Control In myControl.Controls
                        If TypeOf (Mygrx) Is GroupBox Then
                            For Each Mytxt As Control In Mygrx.Controls
                                If (TypeOf (Mytxt) Is TextBox) And (Mytxt.Focused.Equals(True)) Then
                                    Dim Box = CType(Mytxt, TextBox)
                                    Box.Copy()
                                End If
                            Next
                        ElseIf (TypeOf (Mygrx) Is TextBox) And (Mygrx.Focused.Equals(True)) Then
                            Dim Box = CType(Mygrx, TextBox)
                            Box.Copy()
                        End If
                    Next
                End If
            Next
        End Sub
    
    Ovviamente questa è la funzione copia ma per fare taglia incolla basta solo modificare Box.copy con box.paste e box.cut!

     

    Per farlo più iniversale ho fatto una bella ricorsione!

    Private Sub CopiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopiaToolStripMenuItem.Click
            CopiaRic(Me.splContainer.Panel1)
        End Sub
    
    Private Sub CopiaRic(ByVal Ogg As Control)
            For Each myControl As Control In Ogg.Controls
                If (TypeOf (myControl) Is TextBox) And (myControl.Focused.Equals(True)) Then
                    Dim Box = CType(myControl, TextBox)
                    Box.Copy()
                Else
                    CopiaRic(myControl)
                End If
            Next
        End Sub
    


    • Contrassegnato come risposta X-SL4UGHT3R mercoledì 19 ottobre 2011 07:07
    mercoledì 19 ottobre 2011 07:07