Avatar billede Slettet bruger
26. november 2005 - 16:57 Der er 6 kommentarer og
1 løsning

Ændre navn på fil gennem Listview BeginEdit

Hey, jeg har siddet med et problem i længere tid, og kan simpelthen ikke løse det!

Hvis du ser tilbage på Stifinder i Windows, kan du højreklikke på en fil, sige "Omdøb", og så kan du editere i navnet, derefter trykker du væk og så er filnavnet ændret. Jeg vil lave præcis det samme i min version der ligner stifinder virkelig meget.

I listView1 har jeg en context menu på når man højreklikker, hvor du kan sige fx. copy, rename, move, properties osv.. så når man trykker Rename, kan man ændre i filnavnet på den fil man klikkede på. Problemet ligger i, at jeg jo skal affyrer en kommando der rent faktisk ændre den rigtige fil, når du så trykker væk fra BeginEdit editeringen. Det prøvede jeg at gøre med "listView1_AfterLabelEdit" func, men den bliver affyret for tideligt, så selvom du rent visuelt kan se Filnavnet er ændret i dit listview, står det gamle navn der stadig for den item..

Håber der er nogle der forstår mit problem, her er et lille stykke kode:

        private void menuRename_Click(object sender, System.EventArgs e)
        {
            if (listView1.Items.Count == 0)
            {
                //no items, do nothing
            }
            else
            {
                if (listView1.FocusedItem.Selected)
                {
                    listView1.FocusedItem.BeginEdit();
                    // kører listView1_AfterLabelEdit functionen
                }
                else
                {
                    //no selected files
                }
            }
        }
Avatar billede Slettet bruger
26. november 2005 - 17:05 #1
Altså, så resulatet af det, hvis jeg smider en beskedbox på det, vil være det gamle navn, fordi kommandoen bliver affyret for tideligt, den læser stadig det gamle navn for den item, fordi den stadig er igang med at editere i den, håber i kan forstå hva problemet er!

/Lasse
Avatar billede Slettet bruger
28. november 2005 - 13:06 #2
Er der virkelig ingen der kan hjælpe her?
Avatar billede lifo Nybegynder
28. november 2005 - 14:05 #3
du skal ikke køre nogen afterLabelEdit funktiion i din menuRename_click metode
du skal tilføje et event afterLAbelEdit event motode til din listview noget ala

private void listView1_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e)
        {
  string nyTekst = e.Label;
  string gammelTekst = listView1.Items[e.Item].Text

  //lav så et eller andet
        }
Avatar billede Slettet bruger
28. november 2005 - 22:16 #4
Som jeg har det nu, ser det sådan ud:

I void Form1_Load:

private void Form1_Load(object sender, System.EventArgs e)
        {
            listView1.AfterLabelEdit += new EventHandler(listView1_AfterLabelEdit);
        }



private void listView1_AfterLabelEdit(object sender, EventArgs e)
        {
            MessageBox.Show("Det nye navn!");
        }



Her er funktionen der kører når jeg højreklikker i mit listview og siger "Rename"

        private void menuRename_Click(object sender, System.EventArgs e)
        {
            if (listView1.Items.Count == 0)
            {
                //no items, do nothing
            }
            else
            {
                if (listView1.FocusedItem.Selected)
                {
                    listView1.FocusedItem.BeginEdit();
                }
                else
                {
                    //no selected files
                }
            }
        }


Det gør så at jeg kan editere i navnet på filen. Jeg vil så godt have at når man fx trykker væk, så affyrer den en func der renamer filen efter det nye navn.
Avatar billede lifo Nybegynder
29. november 2005 - 11:53 #5
nu ved jeg ikke hvad du har i din list view
om du har sti og filnavn seperaret eller hvad

dette fungerer kun om du har hele stien i første kollonne og du renamer til noget gyldigt
private void listView1_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e)
        {
            string ny = e.Label;
            string gammel = listView1.Items[e.Item].Text;
            File.Move(gammel,ny);
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            if(listView1.SelectedItems.Count >0)
            {
                listView1.SelectedItems[0].BeginEdit();
            }
        }
Avatar billede Slettet bruger
29. november 2005 - 12:51 #6
Yes nu virker det!.. jeg fik ikke taget det nye navn fra "e"..

Svar lige så jeg kan give dig de velfortjente point!

takker
Avatar billede lifo Nybegynder
29. november 2005 - 13:07 #7
svar
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