我目前正在制作一个“app launcher”,它逐行读取文本文件。每一行都是我电脑上其他地方有用程序的路径。为文本文件中的每个路径(即每行)自动生成链接标签。
我希望链接标签的.Text属性是路径的缩写形式(即只是文件名,而不是整个路径)。我已经找到了如何以这种方式缩短字符串(到目前为止一直很好!)
但是,我还希望将完整路径存储在某个地方 - 因为这是我的链接标签需要链接到的地方。在Javascript中,我几乎可以将此属性添加到linklabel,如下所示:mylinklabel.fullpath = line; (当我们读完文本文件时,line是当前行,而fullpath是我想要尝试添加到链接标签的“自定义”属性。我想它需要声明,但我不确定如何。< / p>
以下是我的代码中创建表单的部分,逐行读取文本文件并为每行上找到的路径创建链接标签:
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();
}
那么,如何将完整路径作为字符串存储在linklabel中,以便稍后在我的onclick函数中使用?
答案 0 :(得分: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]
答案 1 :(得分:0)
你有一个选择是有一个截断你的字符串的方法(甚至添加“...”)。然后,您可以将完整路径存储在Linklabel的Tag property中。这是第一部分的示例(截断文本)。
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;
}
希望有所帮助