我有100个文本框分布在20个表单中,所有这些文本框在EditValueChanged上都是一样的。 这些是DevExpress.XtraEditors.TextEdit控件
ParentForm
ChildForm1
TextBox1
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
TextBox2
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
TextBox3
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
DropDow1
ChildForm2
TextBox1
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
TextBox2
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
TextBox3
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
DropDow1
public delegate void PropertyChangedEventHandler(object sender, EventArgs e);
//This one method is declared on the Parent Form.
private void PropertyEditValue(object sender, EventArgs e)
{
//Do some action
}
有没有办法可以在每个ChildForms Textboxe EditValueChanged中访问Parent form的PropertyEditValue方法
this.line1TextEditSubscriber.EditValueChanged += new System.EventHandler(PropertyEditValue);
答案 0 :(得分:0)
只需将其公开,然后将父表单的实例传递给子表单
public void PropertyEditValue(object sender, EventArgs e)
{
//Do some action
}
甚至更简单,如果函数PropertyEditValue不使用任何类变量,您可以声明它static
并直接访问它,如
this.line1TextEditSubscriber.EditValueChanged += ParentClass.PropertyEditValue
答案 1 :(得分:0)
您可以做的是让每个子表单在编辑任何文本框时触发自己的事件:
public class ChildForm2 : Form
{
private TextBox texbox1;
public event EventHandler TextboxEdited;
private void OnTextboxEdited(object sender, EventArgs args)
{
if (TextboxEdited != null)
TextboxEdited(sender, args);
}
public ChildForm2()
{
texbox1.TextChanged += OnTextboxEdited;
}
}
您还可以将所有文本框放入集合中,以便可以在循环中添加处理程序,而不是将该行写入20次:
var textboxes = new [] { textbox1, textbox2, textbox3};
foreach(var textbox in textboxes)
texbox.TextChanged += OnTextboxEdited;
然后父表单可以从每个子表单订阅该事件,并激活它自己的事件:
public class ParentForm : Form
{
public void Foo()
{
ChildForm2 child = new ChildForm2();
child.TextboxEdited += PropertyEditValue;
child.Show();
}
}
这允许子类“将事件向上传递”到父级,以便它可以处理事件,而子类不需要知道有关使用它的类型的实现的任何信息。这个孩子现在可以被任何数量的不同类型的父母使用,或者可以在父母的具体实现都是固定/已知的之前编写(允许开发人员独立地处理每个表单)并且意味着孩子表单赢了由于父母的改变而被“打破”。技术术语是减少耦合。