如何访问另一个表单的表单控件?

wul*_*pro 11 c# controls winforms

我有两个Form班,其中一个有ListBox.我需要一个setter SelectedIndex属性ListBox,我想从第二个调用Form.

目前我正在做以下事情:

表格1

public int MyListBoxSelectedIndex
{
     set { lsbMyList.SelectedIndex = value; }
}
Run Code Online (Sandbox Code Playgroud)

表格2

private ControlForm mainForm; // form 1

public AddNewObjForm()
{
     InitializeComponent();
     mainForm = new ControlForm();           
}

public void SomeMethod()
{
     mainForm.MyListBoxSelectedIndex = -1;
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?

thi*_*eek 23

让他们成为单身人士并不是一个完全糟糕的主意,但我个人不喜欢这样做.我宁愿将一个引用传递给另一个表单.这是一个例子.

Form1触发Form2打开.Form2重载了构造函数,它将调用form作为参数,并提供对Form2成员的引用.这解决了通信问题.例如,我在Form1中将Label Property公开为public,并在Form2中进行了修改.

通过这种方法,您可以以不同的方式进行通信.

下载示例项目的链接

// 你的Form1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }

    public string LabelText
    {
        get { return Lbl.Text; }
        set { Lbl.Text = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

// 你的Form2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private Form1 mainForm = null;
    public Form2(Form callingForm)
    {
        mainForm = callingForm as Form1; 
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.mainForm.LabelText = txtMessage.Text;
    }
}
Run Code Online (Sandbox Code Playgroud)

替代文字http://demo.ruchitsurati.net/files/frm1.png

alt text http://demo.ruchitsurati.net/files/frm2.png


Dwi*_*ght 6

像这样访问表单的控件:

formname.controls[Index]
Run Code Online (Sandbox Code Playgroud)

您可以转换为适当的控件类型,示例:

DataGridView dgv = (DataGridView) formname.Controls[Index];
Run Code Online (Sandbox Code Playgroud)