本人之前未开发过winForm应用程序,最近项目开发遇到一个问题,帅哥美女们帮我看下啊。form1界面上需要像web应用程序那样呈现超链接的样式,点击后弹出form2,load出该记录的详细信息。form1上的数据是从数据库里取出的。web程序中循环写<a href="XXX.aspx?id=XX">XXXX</a>就可以了,winForm如何实现啊。写点击事件的话我不确定form1上到底有几条数据。新手,望高手赐教啊

解决方案 »

  1.   

    使用 LinkLabel参考 http://msdn.microsoft.com/en-us/library/system.windows.forms.linklabel.links.aspx
      

  2.   

    这个好像不是啊,它的意思是一个linklabel中的不同单词给不同的链接,是根据单词字母的位置来的,我的是需要每条记录在form1上对应一个linklabel,点击不同的链接促发的事件不是同一个。我想了下套它思路,把所有链接放一个linklabel中,但是因为每条链接的文字数不确定,又不好实现啊。
      

  3.   

    你给Form2添加一个带参数的构造函数不就可以么?
    Form1:  private void button2_Click(object sender, EventArgs e)
            {
                Form2 form = new Form2("your id");
                form.ShowDialog();
            }
    Form2:private string ID;
            public Form2(string id)
            {
                InitializeComponent();
                this.ID = id;
                //Get the data from database by ID.
            }
      

  4.   


    可是我form1上的显示数据不知道怎么搞,linklabel个数是不确定的,Form2 form = new Form2("your id");中your id应该如何获取呢?要show form2的话应该是点击某一个linklabel,id应该保存到linklabel的哪个属性去啊。
      

  5.   

    string[] urls = new string[] 
        { "http://www.google.com", "http://www.facebook.com", "http://www.twitter.com",
          "http://www.youtube.com", "http://www.myspace.com", "http://www.amazon.com" };
    for (int i = 0; i < urls.GetLength(0); i++)
    {
        LinkLabel ll = new LinkLabel();
        ll.Name = "ll" + i.ToString();
        ll.Text = urls[i];
        ll.Location = new System.Drawing.Point(30, i * 50);
        ll.Size = new System.Drawing.Size(224, 16);
        ll.Link.LinkData = urls[i];
        ll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
        ll.Visible = true;
        Controls.Add(ll);
    }    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);
            }
        }
      

  6.   

    好,谢谢两位,我懂了,稍加修改就能用了,就是有个疑问,每次循环new一个LinkLabel()实际它的对象名是相同的,怎么会区分开了呢,而且每个对象linkLabel1_LinkClicked方法名也相同,它也能找到自己对应的那个。
      

  7.   

    ll.Name = "ll" + i.ToString();
    这个就可以区分不同的名字了。this.Controls["ll0"] 就是第一个。关于linkLabel1_LinkClicked,可以通过 sender 参数区分。