C# 新手 - 链接标签和函数的问题

Posted

技术标签:

【中文标题】C# 新手 - 链接标签和函数的问题【英文标题】:New to C# - problems with link labels and functions 【发布时间】:2011-05-02 18:35:49 【问题描述】:

我是 C# 的新手,以前只用 javascript 编写过程序,所以放轻松!

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

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

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

我真的很感谢任何帮助,因为我发现 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
            

更新:

感谢你们的 cmets 伙计们。我已将相关行更改为:

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

...确实有效。但也许我可以就这一行提出一个问题,因为我发现语法有点不寻常和令人困惑。

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

我也不明白:

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

空格是什么意思?比如objectsender之间?还是在System.EventArgse 之间? LinkClick 是事件的名称,但是为什么我们这里有两个东西,用逗号隔开?

如您所知,我目前发现 C# 语法有点难!

提前谢谢你。

【问题讨论】:

@user:欢迎来到 ***,但仅供参考,*** 是一个问答网站,而不是论坛,所以我们不使用“嗨”、“谢谢”或签名。 @user 您需要的是 C# 教程。在那之后,你应该更清楚了。 【参考方案1】:

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

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

所以试试这样吧。

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:
private void LinkClick(object sender, System.EventArgs e)

    LinkLabel ll = (LinkLabel)sender;
    System.Diagnostics.Process.Start(ll.Text);

【讨论】:

【参考方案4】:

这个例子告诉你更好的方法来实现这一点。

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);
        
    

【讨论】:

以上是关于C# 新手 - 链接标签和函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

新手:R语言的heatmap的制作问题

链接标签 c# - 显示它们的列表

用C#怎么提取a标签的超链接?

C#怎么用正则表达式提取链接和图片标签的属性

新手请教C#中关于静态函数和静态变量

如何在 C# 中进行构造函数链接