0

我一直有以下代码的问题:

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”、“角斗士”和“壮志凌云”,无论我点击哪个链接,它都会打开“壮志凌云”。

我认为这与它在 click 事件中调用变量“filepath”有关,该变量处于最终状态。但是,我不太清楚如何在每个单独的链接上创建静态链接值或操作,因为我研究的所有答案都是关于单个链接标签的情况,而不是动态设置。

任何帮助/建议将不胜感激!

4

1 回答 1

0

尝试如下:
在 foreach 循环中添加一行更像:

linkLabel[count].Tag = filepath;

然后在点击事件中得到这条路径作为打击,

private void LinkedLabelClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    string filepath = ((LinkLabel)sender).Tag.tostring();
    System.Diagnostics.Process.Start(filepath);
}
于 2012-08-22T18:23:59.800 回答