2011-05-10 114 views
0

我目前正在製作一個逐行讀取文本文件的「應用程序啓動器」。每一行都是我個人電腦上某個有用程序的路徑。文本文件中的每個路徑(即每行)都會自動創建一個鏈接標籤。將字符串屬性添加到linklabel?

我想的鏈接標籤。文本屬性爲路徑(即僅僅是文件名,而不是整個路徑)的縮寫形式。我已經發現如何以這種方式縮短字符串(到目前爲止這麼好!)

但是,我還想將某個地方的完整路徑存儲 - 因爲這是我的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(); 

} 

所以,我怎麼能存儲一部全路徑作爲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] 
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; 
} 

希望幫助一些