栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

表单之间的交互

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

表单之间的交互

Form
与其他C#类一样,Windows
Forms中的类也是一个类。表单之间的通信方式与类相同。您可以在类之间进行通信时考虑以下选项:

从第一个表格操纵第二个表格

  • 您可以将适当的参数添加到第二种形式的构造函数中。然后,您可以在创建第二种形式的实例时将值传递给构造函数。在第二种形式中,将参数存储在成员字段中,并在需要时使用它们。

  • 您可以在第二种形式中创建公共属性或方法,并在创建第二种形式的实例后设置这些属性。这样,您可以在第二种形式需要时使用它们。创建第二个表单时,此选项不限于传递值。您甚至可以在执行second的过程中使用该属性

    Form
    。这对于从中获取价值也很有用。

  • 作为另一种选择,您可以将要操纵它的控件公开,这样您就可以从其他形式访问它。建议使用一种方法来执行此操作。

从第二种形式操纵第一种形式

  • 您可以以第一种形式创建一个公共方法或属性,并将第一种形式的实例传递给第二种形式。然后在传递的实例上使用该方法/属性,就可以操纵第一种形式。

  • 您可以创建第二种形式的事件,并在创建第二种形式的实例后,以第一种形式订阅该事件,并将用于更改该形式的代码放入处理程序中。然后以第二种形式引发事件就足够了。

  • 您可以

    Action
    在第二种形式中定义类型或其他委托类型的公共属性,然后在创建第二种形式的实例后,使用自定义操作分配该属性。然后在第二种形式中,当您需要操纵第一种形式时就足以调用该动作。

  • 同样在这里,您可以使第一个窗体的控件公开,然后,如果将第一个窗体的实例传递给第二个窗体,则可以操纵该控件。建议使用其他解决方案。这就像创建公共属性或方法一样,但是在控件上执行特定任务的方法比公开整个控件更好。但是您有时可能需要此解决方案。

以下是有关上述解决方案的一些有用示例。

从第一个表格操纵第二个表格

Example1-使用第二个Form的构造函数

当您需要在创建第二个表单时将一些数据传递给第二个表单时,请使用此示例。

public partial class Form2 : Form{    int selectedValue;    public Form2(int value)    {        InitializeComponent();        selectedValue = value;    }    private void Form2_Load(object sender, EventArgs e)    {        //Load data        this.comboBox1.DataSource = new MyDbContext().Categories.ToList();        this.comboBox1.DisplayMember = "Name";        this.comboBox1.ValueMember = "Id";        this.comboBox1.SelectedValue = selectedValue;    }}

然后以您的第一种形式,

Form2
在创建新实例的值时将其传递给就足够了:

var value = 2; // Or get it from gridvar f = new Form2(value);f.ShowDialog();

例2-使用公共​​财产或第二种形式的方法

当您需要将一些数据传递到第二个表单时,或者在创建第二个表单时甚至在创建第二个表单之后,都可以使用此示例。

public partial class Form2 : Form{    public Form2()    {        InitializeComponent();    }    public string Somevalue    {        get { return textBox1.Text;}        set { textBox1.Text = value;}    }}

然后在第一种形式中,足以

Form2
在需要时,创建之后
Form2
或需要设置
textBox1
on 值时将值传递给
Form2

var f = new Form2(); //value is not needed heref.Somevalue = "some value";f.Show();//...f.Somevalue = "some other value";

示例3-将第二种形式的控件公开

当您需要在第二个窗体上,在创建第二个窗体时甚至在创建第二个窗体之后更改控件的属性时,请使用此示例。最好使用公共属性或方法,而不要公开整个控件属性。

Form
设计器中的控件中,选择控件,然后在“属性”窗口中将属性设置
Modifiers
Public
。还要确保该
GenerateMember
属性为
true
。然后,您可以简单地从外部使用其名称访问此控件
Form

var f = new Form2();f.textBox1= "some value";

从第二种形式操纵第一种形式

示例4-在第一个表单中创建公共方法或属性,并将第一个表单的实例传递给第二个表单的构造函数

当您需要

Form
先从第二个表单进行更改时,请使用此示例。

在您的中

Form1
,创建一个接受某些参数的方法的属性,并将逻辑放入其中:

public void ChangeTextBox1Text(string text){    this.textBox1.Text = text;}

然后创建一个构造函数,在

Form2
该构造函数中接受类型的参数
Form1
并将传递的值保留在成员字段中,并在需要时使用它:

Form1 form1;public Form2 (Form1 f){    InitializeComponent();    form1 = f; }private void button1_Click(object sender, EventArgs e){    form1.ChangeTextBox1Text("Some Value");}

现在,在创建时,

Form2
您应该将实例传递
Form1
给它:

var f = new Form2(this);f.Show();

示例5-在第一个表单中使用第二个表单的事件

看一下这篇文章。它是关于表单和控件之间的通信,但也适用于表单之间的通信。

示例6-以第二种形式注入动作

看一下这篇文章。它是关于表单和控件之间的通信,但也适用于表单之间的通信。

示例7-将第一个表单的控件公开

在此解决方案中,您需要公开第一种形式的控件,例如示例3。然后像示例4一样,将第一种形式的实例传递给第二种形式,并将其保留在字段中,并在需要时使用它。首选使用公共方法或属性。

Form1 form1;public Form2 (Form1 f){    InitializeComponent();    form1 = f; }private void button1_Click(object sender, EventArgs e){    form1.textBox1.Text = "Some Value";}

在创建时,

Form2
您应该将实例传递
Form1
给它:

var f = new Form2(this);f.Show();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380227.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号