Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB.net] ContexMenuStrip Aiuto!!!!!

    Ciao a tutti!!! Ho un problema che mi sta assillando da ore. Premetto che utilizzo Visual Studio Express 2012 Desktop e, come da titolo, programmo in VB.net. Nella mia form ho una serie di textbox che hanno tutte la proprietà ReadOnly impostata a true. Ho creato un ContexMenu dove è contenuto il pulsante modifica. Alle textbox ho assegnato questo menu e quando faccio click col pulsante destro su una textbox, riesco a visualizzare correttamente il menu. Nella sub dell'evento click del pulsante del menu però, ho la necessità di capire su quale textbox ho visualizzato il menu, per far diventare la proprietà ReadOnly a false. Quindi per sintetizzare, come faccio a capire da quale textbox è stato schiacciato il pulsante destro che ha fatto venire fuori il ContexMenu??? Grazie in anticipo!!!

  2. #2
    Nel gestore dell'evento che apre il menu contestuale memorizza la textbox su cui è stato fatto click in una variabile dichiarata a livello di classe; quindi nel gestore del click sul menu potrai andare a pescare in questa variabile la textbox che ti interessa.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie mille MItaly!!! Sono riuscito. Non ho capito cosa intendi per "gestore dell'evento che apre il menu contestuale", comunque l'ho risolto in questo modo seguendo il resto del tuo consiglio:
    nell'evento MouseUp delle textbox, se il pulsante è il destro, memorizzo in una variabile di classe la TextBox. Quando arrivo nella sub che gestisce la pressione del pulsante nel menu contestuale, lavoro sulla textbox salvata prima.

    Grazie mille ancora!!

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Ora non ricordo bene, ma sicuri che il menù contestuale non si porta dietro su quale oggetto è stato richiamato ?

  5. #5
    Originariamente inviato da cassano
    Ora non ricordo bene, ma sicuri che il menù contestuale non si porta dietro su quale oggetto è stato richiamato ?
    Lo pensavo anch'io, ma ho cercato tra le proprietà dell'oggetto senza trovarlo, ho provato a cercarlo anche in modalità debug, in modo da riconoscere subito il nome delle textbox, ma senza risultati

  6. #6
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da Mr L. 94
    Lo pensavo anch'io, ma ho cercato tra le proprietà dell'oggetto senza trovarlo, ho provato a cercarlo anche in modalità debug, in modo da riconoscere subito il nome delle textbox, ma senza risultati
    Ha ragione Cassano, la proprietà si trova sugli oggetti a cui vuoi legare il ContextMenuStrip e non su quest' ultimo.
    Basta che crei un solo ContextMenuStrip "generico" da associare a tutte le textbox e poi puoi anche personalizzarlo usando la proprietà SourceControl che restituisce il controllo su cui viene aperto.
    Esempio:
    codice:
        Private Sub ContextMenuStrip1_Opened(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContextMenuStrip1.Opened
            Dim a As ContextMenuStrip = CType(sender, ContextMenuStrip)
            ToolStripMenuItem1.Text = "abilita " & a.SourceControl.Name
        End Sub
    
        Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
            Dim a As TextBox = CType(ContextMenuStrip1.SourceControl, TextBox)
            a.ReadOnly = False
        End Sub

  7. #7
    Originariamente inviato da Vinsent
    Ha ragione Cassano, la proprietà si trova sugli oggetti a cui vuoi legare il ContextMenuStrip e non su quest' ultimo.
    Basta che crei un solo ContextMenuStrip "generico" da associare a tutte le textbox e poi puoi anche personalizzarlo usando la proprietà SourceControl che restituisce il controllo su cui viene aperto.
    Esempio:
    codice:
        Private Sub ContextMenuStrip1_Opened(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContextMenuStrip1.Opened
            Dim a As ContextMenuStrip = CType(sender, ContextMenuStrip)
            ToolStripMenuItem1.Text = "abilita " & a.SourceControl.Name
        End Sub
    
        Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
            Dim a As TextBox = CType(ContextMenuStrip1.SourceControl, TextBox)
            a.ReadOnly = False
        End Sub
    Grandissimo!!! Ho trovato la textbox!! Sono stato ingannato dal fatto che, prima di tutto io cercavo nell'item del contex menu e non nel contex menu, poi mi aspettavo di trovarlo in una delle solite proprietà come container o parent. Ora aggiusto il codice. Grazie mille a tutti voi che mi avete aiutato!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.