Avatar billede sandrasmurf Nybegynder
07. februar 2008 - 13:34 Der er 6 kommentarer og
1 løsning

RowHeaderMouseClick og korrekt placering af contextmenustrip

Hej eksperter

Jeg er i fuld sving med at lære om DataGridViews og nu kunne jeg godt bruge lidt hjælp.

Jeg vil gerne kunne højreklikke på en RowHeader og få vist en ContextMenuStrip, der tilbyder en delete row kommando.

Jeg har hooket mig op på RowHeaderMouseClick event'et og forsøger følgende for at markere den pågældende række og vise min ContextMenuStrip.

private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
  if (e.Button == MouseButtons.Right)
  {
      // Select the row
      this.dataGridView1.Rows[e.RowIndex].Selected = true;

      // Show the contextmenustrip menu with the delete option
      this.deleteContextMenuStrip.Show(this.dataGridView1, e.X, e.Y);           
    }
}

Den vil godt vælge den korrekte række, men ContextMenuStrippen åbner altid i øverste venstre hjørne af min DataGridView control. Jeg kunne godt tænke mig at den åbnede, der hvor musen var eller oven på den RowHeaderCell jeg har trykket på.

Det er garanteret super nemt, men jeg kan ikke finde svaret.
Avatar billede wisen Nybegynder
07. februar 2008 - 14:20 #1
har du checket om koordinaterne i "e.X" og e.Y" passer - alternativt kan du finde og bruge musens koordinater...
Avatar billede sandrasmurf Nybegynder
07. februar 2008 - 14:37 #2
e.X og e.Y giver koordinater relativt til den rowheader DataGridViewCell jeg har trykket på vil jeg tro. Størrelserne er ca. mellem 5 og 30.

DataGridViewCell er tilsyneladende ikke en control, så jeg kan ikke få lov at skrive

this.deleteContextMenuStrip.Show(this.dataGridView1[e.ColumnIndex, e.RowIndex], e.X, e.Y);

Så jeg skal vel have lavet coordinaterne for e.X og e.Y om til coordinater relativt til min dataGridView?

Hvordan gør man det? Har du et eksempel.
Avatar billede wisen Nybegynder
07. februar 2008 - 15:34 #3
Hvad sker det hvis du bare kalder this.deleteContextMenuStrip.Show()? - ifølge hjælpen skulle den blive vist på den "default position", som jo i teorien er ved muse-cursoren når det er en context-menu
Avatar billede sandrasmurf Nybegynder
07. februar 2008 - 15:37 #4
Den ryger til øverste venstre hjørne af formen, så default er nok formens 0,0.
Avatar billede wisen Nybegynder
07. februar 2008 - 15:37 #5
Ifølge hjælpen til Show - http://msdn2.microsoft.com/en-us/library/15e8969w.aspx - skal koordinaterne være i screen-koordinater...

du måske bruge dataGridView1.PointToScreen() og så ligge henholdsvis e.X og og e.Y til dette punkt...
Avatar billede cwboy Nybegynder
07. februar 2008 - 20:17 #6
this.contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);

ser ud til at fungere.
Avatar billede sandrasmurf Nybegynder
08. februar 2008 - 00:36 #7
Det spiller Cwboy. Jeg takker for hjælpen. Det var jo nemt :-)

Også tak til wisen for input.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester