【问题标题】:Full access from Form2 to Form1从 Form2 到 Form1 的完全访问权限
【发布时间】:2014-03-07 13:57:18
【问题描述】:

如何创建从 Form 2 到 Form1 的完全访问权限
所以我可以在我的第二个 Form2 中使用我的 From1 中的所有文本框、Datagridviews 和给定信息

我的计划:用户在我的 DataGridView 中选择一个项目,然后自动打开我的第二个表单,其中所有信息都在文本框中给出等等......用户可以修改它们并将它们保存到我的 SQL 数据库中,Form2 关闭并且Form1 再次打开

我查看了 Stackoverflow 和谷歌,但我没有找到适合我的解决方案......

【问题讨论】:

  • 你不能把Form1的所有成员(控件、属性等)都公开吗?
  • 您找不到解决方案,因为您尝试做的不是好主意。在表单之间传递数据,而不是让它们的内部可见
  • @SergeyBerezovskiy 我如何在我的表单之间传递数据,为什么这不是一个好主意? ://
  • 基本上,表单中的内容比其他函数需要的要多得多。如果有人要你的执照和注册,你是把你口袋里的东西递给他们还是只是他们需要的东西?

标签: c# sql winforms forms


【解决方案1】:

假设你有 person 类:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

以及绑定到网格的人员列表

List<Person> people = GetPeople();
peopleGridView.DataSource = people;

当您双击某行时,获取数据绑定人员并将其传递给第二种形式:

private void peopleGridView_DoubleClick(object sender, EventArgs e)
{
    if (peopleGridView.CurrentRow == null)
        return;

    Person person = (Person)peopleGridView.CurrentRow.DataBoundItem;
    using (var editForm = new PersonDetailsForm(person))
    {
        if (editForm.ShowDialog() != DialogResult.OK)
            return;

        // get updated person data and save them to database
        UpdatePerson(editForm.Person);
    }
}

在编辑表单中显示控件中的人员数据(您也可以使用数据绑定):

public partial class PersonDetailsForm : Form
{
    public PersonEditForm(Person person)
    {
        InitializeComponent();
        idLabel.Text = person.Id.ToString();
        nameTextBox.Text = person.Name;
        // etc
    }

    public Person Person
    {
        return new Person {
            Id = Int32.Parse(idLabel.Text),
            Name = nameTextBox.Text
        };
    }     
}

优点 - 您可以独立更改 PersonEditForm - 添加/删除控件、更改其类型、添加数据绑定等,而无需更改主窗体。

【讨论】:

    【解决方案2】:

    您可以在 Form2 中创建一个构造函数,该构造函数采用将填充您的控件的参数,例如:

    public Form2(string property1, List<object1> objects)
    {
        textbox1.text = property1;
        gridview1.DataSource = objects;
        //and so on
    }
    

    然后从 form1 调用它们

    Form2 form = new Form2(string1,list1);
    form.Open();
    

    或者您可以将单个对象传递给构造函数并在 Form2 中扩展其属性

    【讨论】:

      【解决方案3】:

      将所有必要的数据传递给第三个类,并将实例作为参数传递给form2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 2012-01-08
        相关资源
        最近更新 更多