将字符串属性添加到linklabel?

时间:2011-05-10 03:46:50

标签: c#-4.0

我目前正在制作一个“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函数中使用?

2 个答案:

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

希望有所帮助