2016-07-29 19 views
0

Frage: Wie kann ich eine Liste von Link-Schaltflächen erstellen, so dass, wenn ein Benutzer auf einen Link klickt, es im Windows Explorer öffnet.Verknüpfen von Wörtern mit Windows Explorer C#

So habe ich ein Rich-Text-Feld, das eine Liste aller Ordnernamen enthält und ich habe eine Liste aller Ordnerpfade. Ich möchte in der Lage sein, auf den Ordnernamen zu klicken und ihn über den Pfad zum richtigen Ordner im Windows Explorer verlinken zu lassen.

   LinkLabel link = new LinkLabel(); 
       link.Text = transfer2; 
       //link.Text = "something"; 
       link.Name = dirName; 
       link.LinkClicked += new LinkLabelLinkClickedEventHandler(this.link_LinkClicked); 
       LinkLabel.Link data = new LinkLabel.Link(); 
       data.LinkData = @"C:\"; 
       link.Links.Add(data); 
       link.AutoSize = true; 
       link.Location = 
       this.Display_Rich_Text_Box.GetPositionFromCharIndex(this.Display_Rich_Text_Box.TextLength); 
       this.Display_Rich_Text_Box.Controls.Add(link); 
       this.Display_Rich_Text_Box.AppendText(link.Text + " "); 
       this.Display_Rich_Text_Box.SelectionStart = this.Display_Rich_Text_Box.TextLength; 

Ich begann mit diesem Code. Ich verwende eine foreach-Anweisung, um die Ordnernamen und den Pfad zu erhalten. Ich habe versucht, den Namen des Links so zu ändern, dass es dem Benutzer erscheint, dass er auf Ordner A klickt, aber wenn man auf Ordner A klickt, benutzt er den Pfad, um den Windows Explorer zu öffnen, aus dem der Ordner stammt.

Alle Ideen oder Hilfe würde sehr geschätzt werden.

aktualisieren

änderte ich den Code ein wenig jetzt so wird es zeigen, aber ich kann nicht nach unten scrollen. Es scheint nur auf der Oberfläche zu sein, als ich etwas in der Rich-Textbox lief und es war scrollbar, während die Verbindung auf der Oberfläche blieb.

enter image description here Ich habe auch ein Bild hinzugefügt, so dass Sie sehen können, was das Problem ist. Ich scrollte ein bisschen, damit es leicht zu sehen war.

   LinkLabel link = new LinkLabel(); 
       link.Text = dirName; 
       //link.Text = "something"; 
       link.Name = transfer2; 
       //link.LinkClicked += new LinkLabelLinkClickedEventHandler(this.link_LinkClicked); 
       LinkLabel.Link data = new LinkLabel.Link(); 
       data.LinkData = @"C:\"; 
       link.Links.Add(data); 
       link.AutoSize = true; 
       link.Location = 
       this.Display_Rich_Text_Box.GetPositionFromCharIndex(this.Display_Rich_Text_Box.TextLength); 
       this.Display_Rich_Text_Box.Controls.Add(link); 
       this.Display_Rich_Text_Box.AppendText(link.Text + "\n"); 
       this.Display_Rich_Text_Box.SelectionStart = this.Display_Rich_Text_Box.TextLength; 

Update: Ich versuche, im Wesentlichen eine Liste von Hyperlinks zu machen, damit ich verwende ich Linklabel nicht denken kann, wie ich denke, es ist in einer festen Position ist.

+0

Ist es Ihr Problem, es zu öffnen Explorer am Pfad, oder ist das Problem mit der Anzeige der Links/Scrollen/etc? Es ist etwas unklar, was die eigentliche Frage ist. – Yushatak

+0

Also ich habe den Pfad zum Windows Explorer. Ich kann es anscheinend nicht machen, entweder Windows Explorer mit diesem Pfad zu öffnen oder die korrekte Anzahl von Link-Buttons anzuzeigen, die dort sein sollten. (Ich möchte in der Lage sein, durch sie zu scrollen) Beantwortet das deine Frage besser? – Tasha

Antwort

0

Für den ersten Teil des Problems, Öffnen Explorer, können Sie in der Liste für jedes Element dieses auf dem Click-Ereignis tun (oder das Click-Ereignis des gesamten Listenbereiches, wie ich später beschreiben):

System.Diagnostics.Process.Start("explorer.exe", "\"" + path + "\""); 

(das Zitat/slash ist sicher Pfade mit Leerzeichen arbeiten zu machen)

Für das UI-Bits, ich habe noch nie zuvor auch LinkLabels gesehen, so dass ich weiß nicht, wie man auf der Straße zu, dass bekommen , lol! Ich bin mir nicht sicher, ob Sie WinForms oder WPF verwenden, aber in beiden Fällen möchten Sie im Allgemeinen etwas wie eine ListBox verwenden (oder ein benutzerdefiniertes Steuerelement, das genau so aussieht, wie Sie es möchten, aber ich nehme an, dass Sie es nicht sind bereit dafür). In WPF können Sie die ItemsSource der ListBox auf Ihre Daten und DisplayMemberPath auf die Eigenschaft setzen, aus der der Text stammt (wenn es nur Strings sind, dann setzen Sie DisplayMemberPath einfach nicht). Sie würden dann ein Ereignis für das Klicken auf die ListBox einrichten und darauf reagieren, indem Sie prüfen, welches Element ausgewählt ist, und den obigen Code ausführen, um Explorer zu öffnen.

Wenn Sie möchten, dass Ihre Benutzeroberfläche mit minimalen Änderungen funktioniert, ersetzen Sie die LinkLabels durch Buttons (Sie können sie wie Links gestalten, wenn Sie wollen, zumindest in WPF), da diese auf die gleiche Weise funktionieren.

+0

(Ich benutze derzeit WinForms) Also interessiere ich mich nicht allzu sehr für das Aussehen Ich bin mir einfach nicht sicher, wie ich eine lange Liste von Knöpfen erstellen soll, damit ich scrollen kann. Das ist mehr oder weniger das verbleibende Problem.Ich würde mindestens 50 Buttons benötigen, ursprünglich dachte ich daran, es durch Rich Textbox zu verbinden, so wie ich auf verlinktem Label angefangen habe (verlinkte Labels sind meistens Buttons, nur mit ein wenig anderer Formatierung) – Tasha

+0

Sie wollen wahrscheinlich eine ListBox (Wie ich oben erwähnt habe, siehe hier http://www.dotnetperls.com/listbox) und Sie wollen wahrscheinlich eine foreach-Schleife über die Verzeichnisse in Ihren Daten machen und für jede einzelne fügen Sie automatisch ein Element zur ListBox hinzu. – Yushatak

+0

Das hat eigentlich ziemlich gut funktioniert. und macht jetzt sehr viel Sinn – Tasha