表单之间的交互-如何从另一个表单更改表单的控件?

jhony3

我想在第一个表单上的dataGridView中选择行以在另一个表单上用该值填充comboBox时设置comboBox.SelectedValue,

在我的加载事件我有第二种形式comboBox.DataSourceDisplayMemberValueMember正确设置它,但是当我设置了selectedValue在第一什么也没有发生。当我以一种形式进行操作时,一切都很好

雷扎·阿盖伊

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 grid
var 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或需要将textBox1on的值设置为时将值传递给Form2

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

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

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

Form设计器中的控件中,选择控件,然后在“属性”窗口中将属性设置ModifiersPublic还要确保该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();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从VB.NET中的另一个表单打开表单?

来自分类Dev

如何使一个表单标签与另一个表单标签通信?

来自分类Dev

关闭另一个表单时,如何刷新另一个表单?

来自分类Dev

在表单之间切换(关闭一个表单,然后打开另一个表单)

来自分类Dev

我需要从另一个类(C#)访问表单控件

来自分类Dev

在另一个表单上打开新表单

来自分类Dev

vb.net-如何从另一个模块更改表单元素的属性

来自分类Dev

如何从另一个子表单中关闭子表单而不关闭主表单C#

来自分类Dev

如何通过单击另一个表单的按钮来更改一个表单中的按钮的文本?

来自分类Dev

在VB中打开另一个表单时如何禁用主表单

来自分类Dev

自动在表单上填充控件,并在另一个表单上添加控件的值

来自分类Dev

从另一个类中拖动带有控件的表单

来自分类Dev

如何从父表单中的另一个datagridview更新子表单的datagridview

来自分类Dev

如何在按钮单击事件中更改另一个表单名称

来自分类Dev

如何使一个表单标签与另一个表单标签通信?

来自分类Dev

HTML。更改另一个表单字段时更改一个表单字段

来自分类Dev

在另一个表单上打开新表单

来自分类Dev

vb.net-如何从另一个模块更改表单元素的属性

来自分类Dev

如何从另一个表单获取tableLayoutPanel的行数?

来自分类Dev

通过另一个表单(按钮)调用表单

来自分类Dev

在html或javascript上提交表单后,如何打开另一个提交表单?

来自分类Dev

如何从另一个表单中取消嵌入子表单?

来自分类Dev

在VB中打开另一个表单时如何禁用主表单

来自分类Dev

如何告诉另一个表单关闭的表单

来自分类Dev

如何从 JButton 打开另一个表单

来自分类Dev

如何将表单中的列表发送到另一个表单

来自分类Dev

如何将一个表单的 $id 传递给另一个表单

来自分类Dev

如何从另一个类调用表单?

来自分类Dev

如何检测表单何时从一个屏幕更改为另一个屏幕

Related 相关文章

  1. 1

    如何从VB.NET中的另一个表单打开表单?

  2. 2

    如何使一个表单标签与另一个表单标签通信?

  3. 3

    关闭另一个表单时,如何刷新另一个表单?

  4. 4

    在表单之间切换(关闭一个表单,然后打开另一个表单)

  5. 5

    我需要从另一个类(C#)访问表单控件

  6. 6

    在另一个表单上打开新表单

  7. 7

    vb.net-如何从另一个模块更改表单元素的属性

  8. 8

    如何从另一个子表单中关闭子表单而不关闭主表单C#

  9. 9

    如何通过单击另一个表单的按钮来更改一个表单中的按钮的文本?

  10. 10

    在VB中打开另一个表单时如何禁用主表单

  11. 11

    自动在表单上填充控件,并在另一个表单上添加控件的值

  12. 12

    从另一个类中拖动带有控件的表单

  13. 13

    如何从父表单中的另一个datagridview更新子表单的datagridview

  14. 14

    如何在按钮单击事件中更改另一个表单名称

  15. 15

    如何使一个表单标签与另一个表单标签通信?

  16. 16

    HTML。更改另一个表单字段时更改一个表单字段

  17. 17

    在另一个表单上打开新表单

  18. 18

    vb.net-如何从另一个模块更改表单元素的属性

  19. 19

    如何从另一个表单获取tableLayoutPanel的行数?

  20. 20

    通过另一个表单(按钮)调用表单

  21. 21

    在html或javascript上提交表单后,如何打开另一个提交表单?

  22. 22

    如何从另一个表单中取消嵌入子表单?

  23. 23

    在VB中打开另一个表单时如何禁用主表单

  24. 24

    如何告诉另一个表单关闭的表单

  25. 25

    如何从 JButton 打开另一个表单

  26. 26

    如何将表单中的列表发送到另一个表单

  27. 27

    如何将一个表单的 $id 传递给另一个表单

  28. 28

    如何从另一个类调用表单?

  29. 29

    如何检测表单何时从一个屏幕更改为另一个屏幕

热门标签

归档