我想在第一个表单上的dataGridView中选择行以在另一个表单上用该值填充comboBox时设置comboBox.SelectedValue,
在我的加载事件我有第二种形式comboBox.DataSource
,DisplayMember
,ValueMember
正确设置它,但是当我设置了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
或需要将textBox1
on的值设置为时将值传递给Form2
:
var f = new Form2(); //value is not needed here
f.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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句