在c#项目中使用多个表单

在c#项目中使用多个表单,c#,winforms,visual-studio,C#,Winforms,Visual Studio,可能重复: 我是Visual Studio 2012和c#编程新手,如果我的问题很琐碎,请原谅 我的表格1已经很满了,所以我添加了第二个表格(表格2) 我有一个点击按钮事件将显示它,但我不能在表单之间传输信息。在文件Form1.cs中,它似乎不知道Form2,反之亦然 private void button4_Click(object sender, EventArgs e) { OneDimLife.Form2 Form = new OneDimLife.Form2

可能重复:

我是Visual Studio 2012和c#编程新手,如果我的问题很琐碎,请原谅

我的表格1已经很满了,所以我添加了第二个表格(表格2) 我有一个点击按钮事件将显示它,但我不能在表单之间传输信息。在文件
Form1.cs
中,它似乎不知道Form2,反之亦然

   private void button4_Click(object sender, EventArgs e)
   {
       OneDimLife.Form2 Form = new OneDimLife.Form2();
       Form.Show();
       //int i, j, N, M;
       //N = panel1.Width; M = panel1.Height;

   }

我可能希望将form1上的panel1复制到form2上的panel1(甚至可能是三倍大小)。

这是您第一个表单上的代码(
SimpleForm
):

和第二个上的代码(
Form2
):


这是您的第一个表单(
SimpleForm
)上的代码:

和第二个上的代码(
Form2
):

不要那样做。 拥有保存数据的类的公共实例。在每个表单上显示您想要的信息。 对于除最琐碎的实现之外的所有实现,您所走的路线总是以混乱告终

更好的当然是一个界面,但这离你的未来有点远。

不要这样做。 拥有保存数据的类的公共实例。在每个表单上显示您想要的信息。 对于除最琐碎的实现之外的所有实现,您所走的路线总是以混乱告终


更好的当然是一个界面,但这离你的未来有点远。

这个问题已经被问过很多次了。看看安德烈:谢谢裁判。我能说些什么?“谢谢”就够了。这个问题已经被问过很多次了。看一看安德烈:谢谢裁判。我能说什么?“谢谢”就够了=)马克·唐恩有点苛刻,因为他回答了这个问题。但我要对你们所有的学习者说。不要这样做,在家里,学校或工作,你会受伤的。公共数据类或接口。这类事情对于直截了当的课程和形式来说已经够糟糕的了。这是一场圣经般的灾难。兰多夫:14122参考文献实际上在安德烈建议的页面上。事实上,我已经完成了这些示例&现在我可以自信地使用3种不同的方法将数据从一个表单传递到另一个表单。格雷戈:我对你的回答一无所知;我是个业余爱好者,需要很多解释!托尼:你的评论让我大笑起来。你能给我介绍一下接口吗?或者这会导致一场圣经般的灾难。所有人:我的问题得到了回答;祝你们好运,迪夫拉科达:+)托尼,你能解释一下为什么你认为这种做法如此糟糕吗?我必须说,我在中小型项目中使用这个概念已有10多年了,我从未遇到过任何问题。这是解决这个问题最简单的办法。我不喜欢用大炮杀死小鸟。@Gregor撇开它不谈,这几乎违反了OO的每一条原则。对于通过a和b进入表格2的指令,它们会影响c和d,而c和d会返回到表格1,而表格1会影响a和b。这是一个非常脆弱的机制,对表单进行一两次明显未经溶化的更改可能会让您陷入一片混乱,而且您可能会在一段时间内找不到它。@DeeFlatCoda它在书中,但需要一点时间才能让您清醒过来。如果您使用一个公共类来保存数据,那么您的两个表单都必须知道它。如果您想以不同的方式实现该类,现在有三个地方需要更改。然而,如果你使用一个接口(将其视为一个契约),那么你可以用许多类来实现它,而你的表单不会在意哪一个,因为它们只知道接口。但我要对你们所有的学习者说。不要这样做,在家里,学校或工作,你会受伤的。公共数据类或接口。这类事情对于直截了当的课程和形式来说已经够糟糕的了。这是一场圣经般的灾难。兰多夫:14122参考文献实际上在安德烈建议的页面上。事实上,我已经完成了这些示例&现在我可以自信地使用3种不同的方法将数据从一个表单传递到另一个表单。格雷戈:我对你的回答一无所知;我是个业余爱好者,需要很多解释!托尼:你的评论让我大笑起来。你能给我介绍一下接口吗?或者这会导致一场圣经般的灾难。所有人:我的问题得到了回答;祝你们好运,迪夫拉科达:+)托尼,你能解释一下为什么你认为这种做法如此糟糕吗?我必须说,我在中小型项目中使用这个概念已有10多年了,我从未遇到过任何问题。这是解决这个问题最简单的办法。我不喜欢用大炮杀死小鸟。@Gregor撇开它不谈,这几乎违反了OO的每一条原则。对于通过a和b进入表格2的指令,它们会影响c和d,而c和d会返回到表格1,而表格1会影响a和b。这是一个非常脆弱的机制,对表单进行一两次明显未经溶化的更改可能会让您陷入一片混乱,而且您可能会在一段时间内找不到它。@DeeFlatCoda它在书中,但需要一点时间才能让您清醒过来。如果您使用一个公共类来保存数据,那么您的两个表单都必须知道它。如果您想以不同的方式实现该类,现在有三个地方需要更改。但是,如果您使用一个接口(将其视为一个契约),那么您可以使用许多类来实现它,并且您的表单不会关心哪个类,因为它们只知道接口。
        Form2 frm = new Form2();
        frm.SourceForm = this;
        frm.ShowDialog();
public partial class Form2 : Form
{
    public SimpleForm SourceForm { get; set; }

    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        //i'am changing Title property on first form...
        SourceForm.Text = "Changed title on SourceForm";
    }
}