Avatar billede Slettet bruger
15. december 2005 - 10:22 Der er 5 kommentarer og
1 løsning

Vælge contextmenu i listview

Jeg bruger et listview hvor jeg vil, ligsom i stifinder, have to contextmenuer. En til når man højreklikker på en item, og en når man ikke gør, så man fx kan sige "paste" eller "new".. men jeg har ikke rigtig fundet ud af hvordan jeg kan styre at have to.

jeg har prøvet ved at tjekke om man har valgt en item i listview1 eller ej, og sætte menu efter det, men det virker ikke så godt. Håber der er nogen der har en smart ide til det, måske nogen erfaringer :)

private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (listView1.SelectedItems.Count == 1)
                {
                    listView1.ContextMenuStrip = ListView1Menu1;
                }
                else
                {
                    listView1.ContextMenuStrip = ListView1Menu2;
                }
            }
        }
Avatar billede Slettet bruger
16. december 2005 - 10:06 #1
Er der ikke en der har prøvet sådan noget før?.. kan ikke rigtig komme videre :)
Avatar billede sovsekoder Nybegynder
16. december 2005 - 18:01 #2
ListViewItem listItem = listView1.GetItemAt(e.X, e.Y);
Point point = new Point(e.X, e.Y);
if((e.Button == MouseButtons.Right) && (listItem != null))
  contextItemMenu.Show((Control)sender, point);
else
  contextEmptyMenu.Show((Control)sender, point);

Context menu'en er dog lidt belastende syns' jeg - når først den er oppe skal den fjernes med et musse tryk... men ellers er det vel noget i stil med ovenstående
Avatar billede sovsekoder Nybegynder
16. december 2005 - 18:02 #3
ja ok, det er så inde i MouseDown lige som det kode du allerede havde:
private void listView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
  ListViewItem listItem = listView1.GetItemAt(e.X, e.Y);
  Point point = new Point(e.X, e.Y);
  if((e.Button == MouseButtons.Right) && (listItem != null))
    contextItemMenu.Show((Control)sender, point);
  else
    contextEmptyMenu.Show((Control)sender, point);
}
Avatar billede Slettet bruger
16. december 2005 - 19:04 #4
Genialt, eller.. simpelt-genialt :) mange tak for det, smid lige et svar
Avatar billede Slettet bruger
16. december 2005 - 19:06 #5
Gjorde sådan her det virker perfekt:

private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ListViewItem listItem = listView1.GetItemAt(e.X, e.Y);
                if ((e.Button == MouseButtons.Right) && (listItem != null))
                    listView1.ContextMenuStrip = ListView1Menu1;
                else
                    listView1.ContextMenuStrip = ListView1Menu2;
            }
        }
Avatar billede sovsekoder Nybegynder
17. december 2005 - 13:23 #6
et svar - super!
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