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」、「グラディエーター」、「トップ ガン」が含まれている場合、どのリンクをクリックしても「トップ ガン」が開きます。

これは、クリックイベントで変数「filepath」を呼び出すことに関係していると思いますが、これは最終状態のままです。ただし、個々のリンクで静的リンク値またはアクションを作成する方法については正確にはわかりません.

ヘルプ/アドバイスをいただければ幸いです。

4

1 に答える 1

0

以下のように試してください:
foreach ループで、次のように 1 行追加します。

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 に答える