Avatar billede omen Nybegynder
14. november 2003 - 17:30 Der er 11 kommentarer og
1 løsning

ListView spørgsmål!

Jeg vil gerne lige lære det at bruge listView, så hjælp mig med dette eksempel:

Jeg har en ListView, som jeg har tilføjet nogle Items til! Jeg har 'Hej' og 'Farvel'. Når jeg klikker på 'Hej', skal der komme en MessageBox der siger 'Hej', og det samme hvis jeg klikker på 'Farvel'.

Når i har vist mig det, vil jeg gerne vide hvordan jeg kan lave to forskellige events til en item, en til når jeg klikker, og en til når jeg dobbeltklikker!
Avatar billede nielsbrinch Nybegynder
14. november 2003 - 17:39 #1
Ved rigtig mange komponenter er der både en "Click" og en "DoubleClick" el. lign. Hvis du vil lave det manuelt, kan du evt. gemme en tidsvariabel ved hvert klik. Så kan du tjekke hvor længe siden det er personen sidst har klikket, hvis det ikke er særligt lang tid siden, kan du betragte det som anden halvdel af et dobbeltklik. Det afføder dog en del andre problemer, såsom at den altid udfører et eller andet ved den første halvdel af noget der i virkeligheden er et dobbeltklik

Det bedste er at bruge komponentens egen hændelse "DoubleClick" hvis der er én.
Avatar billede finger Nybegynder
14. november 2003 - 17:46 #2
det er jo overordentligt svært at lave click og dobbeltklik i samme listview. for hvordan ved man om man har klikket een eller 2 gange. lige så snart du har klikket een gang bliver eventen for click kaldt og dermed når systemet ikke at opfange dobbelt klik.
så skal du ihvertfald selv implementere det og det er ret svært.
men erstat koden i en ny form med dette og se selv:
----------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace listview
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.ListView listView1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Hej");
            System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Farvel");
            this.listView1 = new System.Windows.Forms.ListView();
            this.SuspendLayout();
            //
            // listView1
            //
            this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
                                                                                      listViewItem1,
                                                                                      listViewItem2});
            this.listView1.Location = new System.Drawing.Point(72, 40);
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(304, 168);
            this.listView1.TabIndex = 0;
            this.listView1.Click += new System.EventHandler(this.listView1_Click);
            this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(440, 266);
            this.Controls.Add(this.listView1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void listView1_DoubleClick(object sender, System.EventArgs e)
        {
            foreach(ListViewItem l in listView1.SelectedItems)
            {
                MessageBox.Show(l.Text);
            }
           
        }

        private void listView1_Click(object sender, System.EventArgs e)
        {
            foreach(ListViewItem l in listView1.SelectedItems)
            {
                MessageBox.Show(l.Text);
            }
        }
    }
}
Avatar billede finger Nybegynder
14. november 2003 - 17:47 #3
det er næsten nemmere at lave noget med et event til eet click og et event til click mens shift er holdt nede...
Avatar billede nielsbrinch Nybegynder
14. november 2003 - 18:03 #4
/mig er enig med finger
Avatar billede omen Nybegynder
14. november 2003 - 18:10 #5
finger: Jeg tror ikke jeg kan bruge dit eksempel, fordi mine hændelser skal ikke være MessageBoxes, det var bare et eksempel! Jeg skal sådan set kunne se forskel på hvilke Items jeg klikker på, så f.eks:
Hvis jeg klikker på 'Hej', så har jeg en Panel der hedder panHej, der skal BringToFront(), og det samme med 'Farvel', der skal så et andet Panel bringes frem! Hvordan gør jeg det?
Jeg tænke noget i stil med:
if (ListViewItem.Text.Equals("Hej)
  panHej.BringToFront();

Vil dog meget gerne kunne bruge Case, så f.eks:
string besked = ListViewItem.Text;
switch(besked)
{
Case "hej": panHej.BringToFront(); break;
Case "Farvel": panFarvel.BringToFront(); break;
}

Er nogle af de eksempler gørelige?
Avatar billede finger Nybegynder
14. november 2003 - 18:15 #6
ja det burde begge kunne lade sig gøre
Avatar billede omen Nybegynder
14. november 2003 - 18:17 #7
Ok, jeg fik klaret den, vha:

private void listView1_Click(object sender, System.EventArgs e)
  {
    string Besked;
    Besked = listView1.SelectedItems[0].Text;
    switch(Besked)
        {
          case "Hej": MessageBox.Show("Hej");
          break;
          case "Farvel": MessageBox.Show("Farvel");
          break;
        }
  }
Avatar billede omen Nybegynder
14. november 2003 - 18:17 #8
Tak for hjælpen :)
Avatar billede finger Nybegynder
14. november 2003 - 18:19 #9
hmmm. niels skulle da også have haft et par point :-/
Avatar billede omen Nybegynder
14. november 2003 - 19:34 #10
Så skulle han ha' lagt et svar!

Hvis han føler sig snydt så siger han bare til! Så klarer vi den da :-)
Avatar billede nielsbrinch Nybegynder
15. november 2003 - 02:02 #11
Hvis jeg mente mit svar retfærdiggjorde points, havde jeg gjort det til 'svar' :-)
Avatar billede omen Nybegynder
15. november 2003 - 03:28 #12
Det samme her!

Selvom det faktisk kun var dig der hjalp! finger's eksempel kunne jeg ikke bruge, men du nævnte at jeg kunne bruge dobbelt klik event, som jeg slet ikke havde set :-)
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