如何在C# Visual Studio 2010中在另一个窗体中使用一个窗体中的组件

3
所以,我有一个包含treeView1(在设计视图中创建)和Form3的Form1,在Form1上单击按钮打开Form3。 在Form3中,我想能够在一个或多个方法中使用来自Form1的treeView1,并且我不知道如何做到这一点(使其识别Form1中的treeView1)。 我对C#和VS2010还很陌生。
问题是如何针对我提到的特定情况进行操作,以及如何通用地在其他表格中使用组件。
Form1代码:
    private void button7_Click(object sender, EventArgs e)
    {
        Form3 f3 = new Form3();
        f3.ShowDialog();
    }

Form3 代码:

          private void Add_Function()
          {
                // code...
                string node = Form1.treeView1.SelectedNode.Text;
                // more code
          }  
3个回答

1

让您的Form3包含对Form1实例的引用,在创建它时通过SetForm1Instance方法传递。

public class Form3 {
    Form1 form1;

    void SetForm1Instance(Form1 inst) { 
        form1 = inst;
    }

     private void Add_Function()
     {
          // code...
          string node = form1.TreeView1.SelectedNode.Text;
          // more code
     }  

    //remaining Form3 code
}

在Form1中,只需将this传递给该方法即可。
private void button7_Click(object sender, EventArgs e)
{
    Form3 f3 = new Form3();
    f3.SetForm1Instance(this);
    f3.ShowDialog();
}

public TreeView TreeView1 { get { return treeView1; } }

1
将Form1中的TreeView控件传递给Form3的构造函数:
public class Form3 {
    TreeView _Form1TreeViewControl;

     public Form3(TreeView form1TreeViewControl) {
        InitializeComponent();
        _Form1TreeViewControl = form1TreeViewControl
     }

     private void Add_Function()
     {
          // code...
          string node = _Form1TreeViewControl.SelectedNode.Text;
          // more code
     }  

    //remaining Form3 code
}

然后,在Form1中:
private void button7_Click(object sender, EventArgs e)
{
    Form3 f3 = new Form3(treeView1);
    f3.ShowDialog();
}

1

//通过下面的代码将FORM1中的treeview对象发送到FORM3

private void button7_Click(object sender, EventArgs e)
{
    Form3 f3 = new Form3();
    f3.TreeView1 =  treeView1;
    f3.ShowDialog();
}

//在FORM3中创建一个树形视图变量,保存FORM1的树形视图属性。

public class Form3 
{
  public TreeView TreeView1 = null;
}

//最后调用本地的树形视图进行使用

private void Add_Function()
{
  // code...
  string node = TreeView1.SelectedNode.Text;
  // more code
 }  

所有的变体都可以工作,感谢大家的回复和时间。由于我喜欢简单,所以我会选择这个作为最佳答案,但我测试了每个答案,每个都可以。现在这是最简单的,但我想知道使用其他表单组件的最佳实践是什么(最正确的说法)。 - Code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接