Добавить строковое свойство к ссылочной метке? - PullRequest
0 голосов
/ 10 мая 2011

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

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

Однако я также хотел бы где-то хранить полный путь - так как это то, на что мой linklabel должен будет ссылаться. В Javascript я мог бы просто добавить это свойство в linklabel следующим образом: mylinklabel.fullpath = 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:\\users\matt\desktop\file.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();

}

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

Ответы [ 2 ]

1 голос
/ 10 мая 2011

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

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]
0 голосов
/ 03 июня 2011

Один из вариантов, который у вас есть, - это метод, который усекает вашу строку (и даже добавляет "...") Затем вы можете сохранить полный путь в свойстве Tag Linklabel. А вот пример первой части (усечение текста).

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;
}

Надеюсь, это поможет некоторым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...