Добавить строковое свойство к метке ссылки?

#c#-4.0

#c #-4.0

Вопрос:

В настоящее время я создаю «программу запуска приложений», которая читает текстовый файл построчно. Каждая строка — это путь к полезной программе где-то еще на моем компьютере. Для каждого пути (т.Е. каждой строки) в текстовом файле автоматически создается метка ссылки.

Я хотел бы .Текстовое свойство метки ссылки должно быть сокращенной формой пути (т. Е. просто именем файла, а не всем путем). Я выяснил, как сократить строку таким образом (пока все хорошо!)

Однако я также хотел бы где-нибудь сохранить полный путь — поскольку это то, на что нужно будет ссылаться в моей linklabel. В Javascript я мог бы в значительной степени просто добавить это свойство в linklabel следующим образом: mylinklabel.fullpath=line; (где line — это текущая строка при чтении текстового файла, а fullpath — это мое «пользовательское» свойство, которое я хотел бы попробовать добавить к метке ссылки. Я думаю, это нужно объявить, но я не уверен, как.

Ниже приведена часть моего кода, которая создает форму, читает текстовый файл построчно и создает метку ссылки для пути, найденного в каждой строке:

 private void Form1_Load(object sender, EventArgs e)   //on form load
{
  //System.Console.WriteLine("hello!");
  int counter = 0;
  string line;
  string filenameNoExtension;
  string myfile = @"c:\usersmattdesktopfile.txt";

  //string filenameNoExtension = Path.GetFileNameWithoutExtension(myfile);


  // Read the file and display it line by line.
  System.IO.StreamReader file = new System.IO.StreamReader(myfile);
  while ((line = file.ReadLine()) != null)
  {
    //MessageBox.Show(line);   //check whats on each line


    LinkLabel mylinklabel = new LinkLabel(); 
    filenameNoExtension = Path.GetFileNameWithoutExtension(line);  //shortens the path to just the file name without extension
    mylinklabel.Text = filenameNoExtension;
    //string fullpath=line;      //doesn't work
    //mylinklabel.fullpath=line;   //doesn't work
    mylinklabel.Text = filenameNoExtension;  //displays the shortened path
    this.Controls.Add(mylinklabel);
    mylinklabel.Location = new Point(0, 30   counter * 30);
    mylinklabel.AutoSize = true;
    mylinklabel.VisitedLinkColor = System.Drawing.Color.White;
    mylinklabel.LinkColor = System.Drawing.Color.White;



    mylinklabel.Click  = new System.EventHandler(LinkClick);


    counter  ;
  }

  file.Close();

}
  

Итак, как я могу сохранить полный путь в виде строки внутри linklabel для последующего использования в моей функции onclick?

Ответ №1:

Вы могли бы создать новый пользовательский класс или использовать дополнительное хранилище данных для получения дополнительной информации. Самым простым решением было бы использовать словарь.

 dictonary<string,string> FilePaths = new dictonary<string,string>();

private void Form1_Load(object sender, EventArgs e)   //on form load
{
    ...

    FilePath[filenameNoExtension] = line;
}
  

Вы можете получить доступ к пути

 FilePath[mylinklabel.Tex]
  

Ответ №2:

Один из вариантов, который у вас есть, — это иметь метод, который усекает вашу строку (и даже добавляет «…»). Затем вы можете сохранить полный путь в свойстве тега метки ссылки. И вот пример первой части (усечение текста).

 public static string Truncate(this string s, int maxLength)
{
    if (string.IsNullOrEmpty(s) || maxLength <= 0)
        return string.Empty;
    else if (s.Length > maxLength)
        return s.Substring(0, maxLength)   "...";
    else
        return s;
}
  

Надеюсь, это немного поможет