2011-09-27 142 views
0

我真的被这个问题困住了,所以我希望有人能帮上忙。我有2个winforms,一个有一个listview,另一个有一个文本框。我想检查列表视图中检查哪个项目,并将此文本复制到第二个表单中。我试过这段代码,但它不会工作,任何帮助,非常感谢!将listview中的文本复制到另一个winform中

// 1st form 

private void button5_Click(object sender, EventArgs e) // Brings up the second form 
{ 
    Form4 editItem = new Form4(); 
    editItem.Show(); 
} 

public string GetItemValue() 
{ 
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
     if (listView1.Items[i].Checked == true) 
     { 
     return listView1.Items[i].Text; 
     } 
    } 
    return "Error"; 
} 

// 2nd form 

private void Form4_Load(object sender, EventArgs e) 
{ 
    Form1 main = new Form1(); 
    textBox1.Text = main.GetItemValue(); 
} 
+0

我看到你最近发布了几个问题,其中大部分都涉及非常基本的.NET实践,并且似乎引用了同样的ListView应用程序。这是一个很好的学习场所,但也许你应该考虑从一些在线教程开始,以涵盖基础知识。 http://msdn.microsoft.com/en-us/library/a72418yk%28v=VS.100%29.aspx – user807566

+0

@ user807566是的,我明白你的意思了,但我认为只需要了解我所需要的会更容易随时了解情况,而不是学习所有基本知识,即使如此,我仍然需要帮助,而且您的答案可能会帮助其他有类似问题的人,谢谢您的回答。 –

回答

1

您只需要进行一些更改。由于此功能已存在,因此无需添加您自己的存储所有者表单的方式。

private void button5_Click(object sender, EventArgs e) // Brings up the second form 
{ 
    Form4 editItem = new Form4(); 
    editItem.Show(this); //passes a reference to this form to be stored in owner 
} 

然后在其他表格上引用它。

private void Form4_Load(object sender, EventArgs e) 
{ 
    textBox1.Text = ((Form1)owner).GetItemValue(); 
} 
+0

非常感谢,像魅力一样工作! –

3

您正在创建的Form4内新Form1已经加载之后。您需要参考原始Form1。这可以通过几种方式完成,最简单的方法是将参考传递给Form4构造函数。

// Form 1 

// This button creates a new "Form4" and shows it 
private void button5_Click(object sender, EventArgs e) 
{ 
    Form4 editItem = new Form4(this); 
    editItem.Show(); 
} 

public string GetItemValue() 
{ 
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
     if (listView1.Items[i].Checked == true) 
     { 
     return listView1.Items[i].Text; 
     } 
    } 
    return "Error"; 
} 

-

// Form 2 (Form4) 

// Private member variable/reference to a Form1 
private Form1 _form; 

// Form4 Constructor: Assign the passed-in "Form1" to the member "Form1" 
public Form4(Form1 form) 
{ 
    this._form = form; 
} 

// Take the member "Form1," get the item value, and write it in the text box 
private void Form4_Load(object sender, EventArgs e) 
{ 
    textBox1.Text = this._form.GetItemValue(); 
} 
1

尝试thisway

FORM 1

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     //Fields 
     public List<string> itemTexts; 

     public Form1() 
     { 
      InitializeComponent(); 

      //Generate some items 
      for (int i = 0; i < 10; i++) 
      { 
       ListViewItem item = new ListViewItem(); 

       item.Text = "item number #" + i; 

       listView1.Items.Add(item); 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      foreach (ListViewItem item in listView1.Items) 
      { 
       if (item.Checked) 
       { 
        itemTexts.Add(item.Text); 
       } 
      } 

      Form2 TextBoxForm = new Form2(itemTexts); 
      TextBoxForm.Show(); 
     } 


    } 
} 

FORM 2

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form2 : Form 
    { 
     //Fields 
     List<string> itemTexts; 

     public Form2(List<string> itemTexts) 
     { 
      InitializeComponent(); 

      this.itemTexts = itemTexts; 

      foreach (string text in itemTexts) 
      { 
       textBox1.Text += text + Environment.NewLine; 
      } 
     }  
    } 
} 
相关问题