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

    contextmenu non appare dove voglio

    Salve, in una datagridview vorrei implementare un menù (contextmenustrip) che quando si clicca sulla cella col destro mi compaia per effettuare una ulteriore scelta.
    Tutto bene, l'unico problema è che vorrei che mi compaia a ridosso del punto dove clicco, invece compare sempre nello stesso posto, in alto a sinistra.
    Perchè?? visto che gli dico:

    ContextMenuStrip1.show(datagridview1,e.location)

    dove e è la variabile della classe DataGridViewCellMouseEventArgs fornita dall'evento cellmouseclick

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Semplicemente perchè hai scelto il modo più complicato per far visualizzare la ContextMenuStrip. La procedura utilizzata e la solita: popolare la ContextMenuStrip e impostare la proprietà .ContextMenuStrip della DataGridView con la ContextMenuStrip aggiunta al progetto.

    Se utilizzi il metodo .Show, come hai fatto, dovrai anche dirgli dove visualizzarla e sicuramente non con:
    codice:
    e.Location
    visto che il DataGridViewCellEventArgs non espone la proprietà location. Dovrai utilizzare le coordinate del mouse sulla Datagrid o utilizzando il MousePosition oppure:

    codice:
     Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            ContextMenuStrip1.Show(DataGridView1, x, y)
        End Sub
    
        Dim x As Integer
        Dim y As Integer
        Private Sub DataGridView1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseMove
            x = e.Location.X
            y = e.Location.Y
        End Sub
    Ma la soluzione più semplice ed elegante mi sembra la prima.
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Scusa il ritardo nel risponderti Pirelli72.
    Veramente io ho risolto, e in un modo che non mi sembra affatto complicato.
    Ho semplicemente utilizzato la funzione GetCellDisplayRectangle del datagridview, la quale mi da l'area di visualizzazione della cella, in base a quella ho potuto dare le coordinate per il metodo show.
    Grazie comunque

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ribadisco il metodo è:

    codice:
    ... popolare la ContextMenuStrip e impostare la proprietà .ContextMenuStrip della DataGridView con la ContextMenuStrip aggiunta al progetto.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Ma è esattamente quello che faccio anche io.
    Dopodichè utilizzo il metodo show.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non serve il metodo .Show.
    Quando imposti tale proprietà automaticamente il ContextMenuStrip si apre nella cella selezionata, senza altro codice.

    Il metodo .Show serve per far apparire il CMStrip se non imposti tale proprietà o ad esempio se devi utilizzare il CMStrip per più controlli.
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Ahhhhhhhhhh, scusa il ritardo nel comprenderti, adesso ho capito e lo metto in pratica.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Figurati, l'importante è capirsi.
    Sbagliare è umano, perseverare è diabolico.

  9. #9
    Accidenti, l'ho provato adesso, che meraviglia, niente coordinate da impostare, tutto molto più snello e pulito, grazie Pirelli72

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Sbagliare è umano, perseverare è diabolico.

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.