2012-08-22 4 views
0

나는 다음과 같은 코드에 문제가 꾸게에 LinkLabels를 추가 :는 동적으로 TableLayoutPanel

namespace Viewer 
{ 
    public partial class Form1 : Form 
    { 
     int count = 0; 
     LinkLabel[] linkLabel = new LinkLabel[200]; 
     string filename; 
     string extension; 
     string filepath; 

     private void btnLoad_Click(object sender, EventArgs e) 
     { 
      // Creates a Directory for the Movies Folder 
      DirectoryInfo myDirectory = new DirectoryInfo(@"C:\Users\User\Movies"); 

      // Creates a list of "File info" objects 
      List<FileInfo> ls = new List<FileInfo>(); 

      // Adds filetypes to the list 
      ls.AddRange(myDirectory.GetFiles("*.mp4")); 
      ls.AddRange(myDirectory.GetFiles("*.avi")); 

      // Orders the list by Name 
      List<FileInfo> orderedList = ls.OrderBy(x => x.Name).ToList(); 

      // Loop through file list to act on each item 
      foreach (FileInfo filFile in orderedList) 
      { 
       // Creates a new link label 
       linkLabel[count] = new LinkLabel(); 

       // Alters name info for display and file calling 
       filepath = filFile.FullName; 
       extension = filFile.Extension; 
       filename = filFile.Name.Remove(filFile.Name.Length - extension.Length); 

       // Write to the textbox for functional display 
       textBox1.AppendText(filename + "\r\n"); 

       // Alters link label settings 
       linkLabel[count].Text = filename; 
       linkLabel[count].Links.Add(0, linkLabel[count].Text.ToString().Length, filepath); 
       linkLabel[count].LinkClicked += new LinkLabelLinkClickedEventHandler(LinkedLabelClicked); 

       // Adds link label to table display 
       tblDisplay.Controls.Add(linkLabel[count]); 

       // Indexes count up for arrays 
       count = count + 1; 
      } 
     } 

     private void LinkedLabelClicked(object sender, LinkLabelLinkClickedEventArgs e) 
     { 
      System.Diagnostics.Process.Start(filepath); 
     } 

    } 
} 

내 목표는 내가 발사에 추가 모든 미디어 파일에 대한 링크의 테이블을 생성하는 것입니다, 그리고 링크를 통해 해당 플레이어의 파일을 열 수 있습니다.

현재로서는 모든 링크가 제대로 생성되지만, 링크를 클릭 할 때마다 목록의 마지막 항목이 실행됩니다.

예를 들어, 링크에 "300", "Gladiator"및 "Top Gun"이 포함되어 있으면 내가 클릭 한 링크와 상관없이 "Top Gun"이 열립니다.

최종 상태 인 click 이벤트에서 변수 "filepath"를 호출하는 것과 관련이 있다고 가정합니다. 그러나, 나는 각 링크마다 고정 링크 값 또는 동작을 생성하는 방법에 대해 명확하지 않습니다. 연구 한 모든 대답은 동적 링크 업이 아닌 단일 링크 레이블 상황과 관련되어 있습니다.

도움/조언을 보내 주시면 감사하겠습니다.

답변

0

다음과 같이하십시오 : foreach 루프에서
같이 한 줄 더 추가

linkLabel[count].Tag = filepath; 

다음 클릭 이벤트에 타격로했다

private void LinkedLabelClicked(object sender, LinkLabelLinkClickedEventArgs e) 
{ 
    string filepath = ((LinkLabel)sender).Tag.tostring(); 
    System.Diagnostics.Process.Start(filepath); 
} 
+0

을이 경로를 얻을! 나는 Tag 속성에 대해 더 많이 연구해야 할 것이다. 나는이 사실을 알지도 못했다. 꽤 유용하게 보입니다. 고마워요! –