Announcement

Collapse
No announcement yet.

kopieren und einfügen in einer listview

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • kopieren und einfügen in einer listview

    Hallo ich möchte dateien die in meiner listview angezeigt werden kopieren und wieder iwo einfügen
    aber so wie ich das versucht habe funktioniert das nicht
    danke für die hilfe

    Code:
    private void Kopieren_Click(object sender, EventArgs e)
            {
                Clipboard.SetDataObject(listView1.SelectedItems);
            }
    
            private void Einfügen_Click(object sender, EventArgs e)
            {
                listView1 = Clipboard.GetDataObject();
                
            }
    C# bringt mich noch um den Verstand

  • #2
    Zur information: Items die in deiner Listview angezeigt werden sind keine Dateien. Einfach das Item zu kopieren und dann zu hoffen dass auch die Datei aus welcher du die Information zur Anzeige bezogen hast, kopiert wurde ist ein falscher Ansatz

    Möchtest du also nur das Item (für die Anzeige) oder auch die Datei im Hintergrund kopieren?


    außerdem:

    [highlight=c#]
    private void Einfügen_Click(object sender, EventArgs e)
    {
    listView1 = Clipboard.GetDataObject();
    }
    [/highlight]

    das kann beim besten willen nicht funktionieren

    Comment


    • #3
      Datentypen genau beachten!

      Hallo,

      bei C# (eigentlich bei NET insgesamt) musst du genau auf die richtigen Typen achten. Bei SetDataObject holst du dir ein Array von ListViewItems. Bei GetDataObject bekommst du ein Ding vom Typ object, das erstens in den richtigen Typ konvertiert muss und zweitens richtig verwendet werden muss.

      Du verstößt in zweierlei Hinsicht gegen diese Forderungen:
      1. Du übernimmst es als object, aber nicht als Array von ListViewItems. Der Compiler weiß nicht, welcher Typ das ist.
      2. Du weist es nicht der Items-Eigenschaft einer ListView zu, sondern einer Variablen, die für eine ListView steht. Es gibt einen Unterschied zwischen der ListView selbst (die ist der Besitzer/Container) und ihrem Inhalt. Ein Haus ist auch etwas anderes als die Summe seiner Mieter.

      Das kann nicht funktionieren. Richtig geht es (verkürzt gesagt) so:
      [highlight=c#]ListViewItem[] items = Clipboard.GetDataObject() as ListViewItem[];
      if (items != null) // sicherheitshalber
      listView1.Items.AddRange(items);[/highlight]
      Gruß Jürgen

      PS. Die Sache mit den Dateien hatte ich doch auch schon mal angesprochen: Unterscheide zwischen dem Dateinamen (einem String), der Datei (einem komplexen Objekt) und dem Dateiinhalt (einer Folge von Bytes oder Strings oder was auch immer).

      Comment


      • #4
        ich möchte natürlich die ganze datei kopriern (oder besser gesagt den pfad) wie ich mitlerweile rausgefunden habe...
        und diese dann aber beim einfügen wieder als datei zur verfügung haben oder sie eben so angezeigt bekommen wie die anderen dateien die in der listview zu sehen sind

        Ps: das das so nicht funktioniert ist mir klar aber war erstmal meine überlegung was wo hin muss daher hatte ich es erstmal rein geschrieben
        C# bringt mich noch um den Verstand

        Comment


        • #5
          Ach so. Dann geht das nicht über Clipboard, sondern mit einem direkten Befehl. Dafür brauchst du natürlich den Ziel-Dateinamen; wie der zu bestimmen ist, kann ich aus deiner ListView nicht ablesen. Dann geht es mit File.Copy(alterName, neuerName, überschreiben j/n). In die ListView.Items muss dann der neue Name eingetragen werden.

          Damit kann immer nur eine einzelne Datei kopiert werden. Für Platzhalter oder ganze Verzeichnisse gibt es IMHO keine Standardmethode

          Weil du immer von der ListView gesprochen hast, bin ich gar nicht auf die Idee gekommen, dass du die Dateien auf der Festplatte meinst.

          Auch für diese Situation gilt also: Achte genau auf die Typen. Eine Datei befindet sich eigentlich nur auf der Festplatte; in der ListView steht der Dateiname, der Dateiinhalt steht (wenn gewünscht) z.B. in einer RichTextBox.

          Gruß Jürgen

          Comment


          • #6
            ok kopieren tut er jetz ohne fehler anzuzeigen (also hoff ich mal das er kopiert ^^)

            [highlight=c#]
            private void Kopieren_Click(object sender, EventArgs e)
            {
            try
            {
            StringCollection str = new StringCollection();
            str.Add(this.listView1.SelectedItems[0].Text);
            Clipboard.SetFileDropList(str);

            }
            catch
            {
            MessageBox.Show("Datei konnte nicht kopiert werden!");
            }


            private void Einfügen_Click(object sender, EventArgs e)
            {
            try
            {
            StringCollection str1 = null;
            str1 = Clipboard.GetFileDropList();

            //listView1.Items.Add();

            }
            catch
            {
            MessageBox.Show("Datei konnte nicht eingefügt werden!");
            }
            [/highlight]

            nur wie bekomm ich das kopierte dann wieder in die listview rein?
            das einfügen macht so nämlich nix
            Zuletzt editiert von kattzze; 22.02.2010, 11:22.
            C# bringt mich noch um den Verstand

            Comment


            • #7
              Originally posted by kattzze View Post
              ok kopieren tut er jetz ohne fehler anzuzeigen (also hoff ich mal das er kopiert ^^)
              Ob das funktioniert, kannst du doch mit TotalCommander, Windows Explorer o.ä. überprüfen.

              Originally posted by kattzze View Post
              [highlight=c#]
              StringCollection str1 = null;
              str1 = Clipboard.GetFileDropList();

              //listView1.Items.Add();
              [/highlight]

              nur wie bekomm ich das kopierte dann wieder in die listview rein?
              das einfügen macht so nämlich nix
              Mit Add ohne Parameter geht es natürlich nicht. In str1 hast du eine StringCollection (dabei ist es unwichtig, dass die im Moment nur 1 Element enthält; es ist trotzdem eine Collection). Für Items.Add brauchst du aber ein ListViewItem, für Items.AddRange ein ListViewItem-Array.

              Wenn ich mich richtig erinnere, wurde dir das bereits früher erklärt; und du hattest es auch kapiert und übernommen. Jürgen

              Comment


              • #8
                ok kopieren funzt denn irgendwie doch nich...
                wenn ich das normal im explorer versuche einzufügen sagt er mit "datei kann nicht kopiert werden: Die Quelldatei oder vom Quelldateiträger kann nicht gelesen werden."
                C# bringt mich noch um den Verstand

                Comment


                • #9
                  Wo steht denn der Code, mit dem kopiert werden soll? Wo und wie rufst du ihn auf, wie werden die Parameter für File.Copy festgelegt?

                  wenn ich das normal im explorer versuche einzufügen
                  Was meinst du mit "das normal"? Versuchst du es mit Drag&Drop im Explorer; oder versuchst du, einen Text aus der ListView in die Dateiliste des Explorers einzufügen? Vielleicht ist die Datei, die kopiert werden soll, auch durch eine andere Maßnahme gesperrt? Kopieren geht bei einer offenen Datei manchmal, aber nicht immer.

                  Wenn du dir einbilden solltest, dass durch Clipboard.SetFileDropList(str) und Get... eine Datei kopiert wird, dann wärest du immer noch auf dem Holzweg und hättest alle bisherigen Hinweise auf die Unterschiede zwischen Datei, Dateiname usw. ignoriert. Aber das kann ich mir wirklich nicht vorstellen.

                  Jürgen

                  Comment


                  • #10
                    nein ich hab das nich ignoriert steig nur irgendwie in c# noch nicht ganz hinter...

                    ein flie.copy allerding bring ich das nirgens mit etwas in verbing da ich nich weiß wie weil überall nur beschrieben wird wie man eine datei kopiert und dann gleich an einem anderen ort wieder einfügt ich ja aba selbst bestimmen möchte wo die jeweiliige wieder hin soll...

                    [highlight=c#]
                    File.Copy(listView1.SelectedItems[0].Text, "new");
                    [/highlight]
                    C# bringt mich noch um den Verstand

                    Comment


                    • #11
                      Es ist wohl an der Zeit, dich auf Hinweise für die Fragen aufmerksam zu machen. Mit halbwegs vernünftiger Rechtschreibung werden Probleme erheblich leichter verstanden. Mit deinen langen Sätzen ohne Großbuchstaben, ohne Punkt und Komma, ohne erkennbare Struktur geht es mir wie dir:
                      xxx bringt mich noch um den Verstand
                      Bei deinem letzten Code-Schnipsel musst du doch nur "new" durch einen passenden Pfad ersetzen. Wenn du die Datei erst noch auswählen willst, musst du eben einen OpenFileDialog dazwischensetzen und dessen FileName übernehmen.

                      Hast du eigentlich mal angefangen, dich systematisch in C# einzuarbeiten, beispielsweise durch das OpenBook VC#?

                      Jürgen

                      PS. Ich tendiere langsam dazu, das Thema zu sperren; ich habe den Eindruck, dass wir mit dem Frage- und Antwortspiel überhaupt nicht vorankommen. Vielleicht solltest du noch mal anfangen und dir ein genaues Konzept überlegen, welche Schritte nacheinander gemacht werden müssen (und achte auf Bezeichnungen und Typen).

                      Comment


                      • #12
                        Ja das mit der Groß- und Kleinschreibung ist so eine doofe angewohnheit und stört beim programmieren auch oft. Tut mir wirklich leid ich versuch es zu ändern.

                        Ja ich habe so einige Bücher gewälzt und einige Beispielprogramme von dort probiert und eigeindlich auch gut hin bekommen darum versteh ich ja auch selber nicht so wirklich warum ich nicht klar komme in diesem doofen Programm.


                        Das Problem ist ja ich möchte der Datei ja nicht gleich einen neuen Pfad zuweisen sondern dann mit Hilfe von Einfügen selber den Ordner wählen können, da hängt es ja...
                        Das andere da findet man ja 1000de von Beispielen das wär kein Porblem das abzuändern aber so hab ich nichts gefunden.
                        C# bringt mich noch um den Verstand

                        Comment


                        • #13
                          Originally posted by Jürgen Thomas View Post
                          PS. Ich tendiere langsam dazu, das Thema zu sperren; ich habe den Eindruck, dass wir mit dem Frage- und Antwortspiel überhaupt nicht vorankommen. Vielleicht solltest du noch mal anfangen und dir ein genaues Konzept überlegen, welche Schritte nacheinander gemacht werden müssen (und achte auf Bezeichnungen und Typen).
                          Nach Rücksprache mit einem weiteren Moderator entschließe ich mich, dieses Thema zu schließen. Du solltest jetzt wissen:

                          * Die ListView ist zur Anzeige von Informationen gedacht.
                          * Das Clipboard ist geeignet für Copy&Paste von bestimmten Daten, aber nicht für ganze Dateien.
                          * Zum Kopieren von Dateien benutzt man File.Copy.
                          * Zur Auswahl einer Datei - genauer: eines Dateinamens - benutzt man OpenFileDialog.

                          Deine Aufgabe ist es nun unter Berücksichtigung deiner Pläne, diese ganzen Hinweise zu sortieren, zu gliedern und sinnvoll als Code zusammenzufassen. Dazu könnte dir auch ein Struktogramm o.ä. helfen; sehr oft ist "Programmieren auf Papier" äußerst nützlich: Wenn ich das mache, soll das passieren; dann geht es so weiter; andernfalls ... In dieser Form solltest du Schritt für Schritt (durchaus sehr kleinteilig) nachdenken, was du willst und machen kannst.

                          Wenn du soweit bist und ein Problem sinnvoll beschreiben kannst (wie gesagt: bitte mit Satzstruktur und Satzzeichen), darfst du gerne neu anfangen.

                          Bitte sei mir nicht bös: Wir helfen hier alle ehrenamtlich; das kann nur funktionieren, wenn wir Fortschritte sehen und nicht dauernd aneinander vorbeireden. Gruß Jürgen

                          Comment

                          Working...
                          X