2011-05-02 44 views
3

我是C#的新手,并且以前只使用JavaScript编写程序,所以轻松点我!C#的新手问题 - 链接标签和函数的问题

我写了一个“app启动程序”程序,它逐行读取文本文件。每一行只是程序的一个路径,例如C:\ Users \ Jim \ Desktop \ Gravity.exe

到目前为止,我的程序可以成功读取每一行并生成一个链接列表。按照预期,每个链接都显示为路径本身。

我遇到的问题是这些链接不起作用。但是,如果他们都被赋予相同的固定路径,他们将工作。我希望每个链接都使用其.Text属性作为目的地。 (请参阅下面我的代码中的评论“作品”和“不起作用”)。我得到的唯一错误是“找不到指定的文件”。

我真的很感激任何帮助,因为我发现C#比Javascript困难得多!

public partial class Form1 : Form 
{ 
    private void Form1_Load(object sender, EventArgs e) //on form load 
    { 
     int counter = 0; 
     string line; 
     string myfile = @"c:\users\matt\desktop\file.txt"; 

     // 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();  //LinkLabel tells us the type of the object e.g. string mystring ="hello"; 
      mylinklabel.Text = line; 
      this.Controls.Add(mylinklabel); 
      mylinklabel.Location = new Point(0, 30 + counter * 30); 

      mylinklabel.Click += new System.EventHandler(LinkClick); 

      counter++; 
     } 
     file.Close(); 
    } 

    private void LinkClick(object sender, System.EventArgs e) 
    { 
     //Process.Start(this.Text); //doesn't work 
     Process.Start(@"C:\Users\Jim\Desktop\gravity.exe"); //works 
    }   
} 

更新:

感谢您的意见家伙。我已将相关线路更改为:

Process.Start(((LinkLabel)sender).Text); 

...并且确实有效。但是也许我可以提出一个关于这条线的问题,因为我发现语法有点不寻常和令人困惑。

是不是senderLinkLabel对象的属性?所以要引用它,我们不应该使用LinkLabel.sender? (这将是更多的JavaScript的风格,我不明白(LinkLabel)sender符号!)

我也想不明白:

private void LinkClick(object sender, System.EventArgs e) 

是什么空间呢?如objectsender之间?或者System.EventArgs e? LinkClick是事件的名称,但为什么我们在这里有两件事,用逗号分隔?你可以告诉我,我目前发现C#语法有点难!

预先感谢您。

+1

@user:欢迎StackOverflow上,但仅供参考,StackOverflow的是Q&A网站,而不是一个讨论的论坛,所以我们不使用 “你好” 或 “谢谢”,或签名。 – 2011-05-02 18:43:10

+0

@user你需要的是关于C#的教程。之后,事情应该对你更清楚。 – dandan78 2011-05-04 11:47:45

回答

3

您使用this.Text似乎至少是其中一个问题。

this指向您的班级的当前实例。你想要的是点击了LinkLabel的实例。幸运的是,该事件的sender参数提供了此信息。

所以尝试这样的事情,而不是。

LinkLabel lnk = sender as LinkLabel; 
System.Diagnostics.Process.Start(lnk.Text); 
0

在这种情况下,“this.Text”指的是您的FORMS文本标题。用户((LinkLabel)发件人).Text

0
private void LinkClick(object sender, System.EventArgs e) 
{ 
    LinkLabel ll = (LinkLabel)sender; 
    System.Diagnostics.Process.Start(ll.Text); 
} 
0

此示例告诉您更好的实现方法。

http://msdn.microsoft.com/en-us/library/system.windows.forms.linklabel.linkclicked%28v=VS.100%29.aspx

private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) 
    { 
     // Determine which link was clicked within the LinkLabel. 
     this.linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true; 

     // Display the appropriate link based on the value of the 
     // LinkData property of the Link object. 
     string target = e.Link.LinkData as string; 

     // If the value looks like a URL, navigate to it. 
     // Otherwise, display it in a message box. 
     if(null != target && target.StartsWith("www")) 
     { 
      System.Diagnostics.Process.Start(target); 
     } 
     else 
     {  
      MessageBox.Show("Item clicked: " + target); 
     } 
    }