#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;
}
Надеюсь, это немного поможет