我有一个表单(父表单)正在调用另一个表单(子表单)。
在子窗体中,我在文本框中进行了一些更改,并且在父窗体中有标签,我想在其中动态显示这些更改。
我现在正在做的是:
NewForm newForm = new NewForm(this);
newForm.Parent = this;
newForm.ShowDialog(this);
我不确定这是正确的做法...
但是我无法通过子形式获得此控件。
请帮助我。
提前致谢...
答案 0 :(得分:4)
首先在父表单中添加一个将更新标签的属性。
public string LabelonParent {
get { return label1.Text;}
set { label1.Text=value;}
}
现在添加将显示子表单的事件方法
private void button1_Click(object sender, EventArgs e)
{
ChildClass form = new ChildClass();
DialogResult result = form.ShowDialog(this);
}
在子窗体中添加textchanged事件方法。
private void textBox1_TextChanged(object sender, EventArgs e)
{
((ParentClass)this.Owner).LabelonParent = textBox1.Text;
}
您甚至可能希望添加一个formload事件方法来使用label1.Text填充textBox1
private void ChildClass_Load(object sender, EventArgs e)
{
textBox1.Text = ((ParentClass)this.Owner).LabelonParent;
}
答案 1 :(得分:1)
以下是实现此功能的最佳方式,以及实时更新子表单上的文本并反映在父表单中
儿童表格代码
public delegate void PassText(string textValue);
public event PassText RaisePassTextEvent;
private void textBox_TextChanged(object sender, EventArgs e)
{
if (RaisePassTextEvent != null)
{
RaisePassTextEvent(textBox.Text);
}
}
主要/父母表格代码
Child oChild = new Child();
oChild.RaisePassTextEvent += oChild_RaisePassTextEvent;
oChild.MdiParent = this;
oChild.Show();
void oChild_RaisePassTextEvent(string textValue)
{
this.Invoke(new Action(() => lableControl.Text = textValue));
}
答案 2 :(得分:1)
要做到这一点还有很多方法。例如,将control修饰符属性分配给public,使其可以在另一个类中访问该控件。另一种方法是您可以在子窗体中创建属性或公共变量,并在textchange上分配值。此值可以在ShowDialog()函数调用后返回。即使您可以将父表单标签控件修饰符属性设置为public,也可以直接以子表单形式访问该标签。
但是,将控件修饰符公开分配不是正确的方法。
另一个逻辑是,您可以创建子窗体的公共事件,并由父窗体处理。当文本被更改时,将执行此事件。
frmChild child = new frmChild();
frmChild.Lable_TextChanged += new EventHandler(child_TextChanged);
frmChild.ShowDialog();
//lbl which will be placed in parent form
private void child_TextChanged(object sender, EventArgs e)
{
//sender will return textbox from child form
lbl.Text = ((TextBox)sender).Text;
}
儿童形式的代码:
public event EventHandler Lable_TextChanged;
//txtText which will be placed in child form
private void txtText_TextChanged(object sender, EventArgs e)
{
if (Lable_TextChanged != null)
Lable_TextChanged(sender, e);
}
答案 3 :(得分:0)
这是实现这一目标的正确方法。但是如果你想使用((ParentForm)newForm.Parent).CustomProp
这样的特定自定义属性,请记住使用Invoke()
,因为每个表单都有自己的线程。
答案 4 :(得分:0)
您可以在您的子课程中公开public string LabelText { get; set; }
。
当您关闭diaglog时,LabelText
从子级更新为父级。
检查以下代码
class ChildClass
{
public string LabelText { get; set; }
//Update the above property in suitable method.
public string ChildMethod()
{
LabelText = "XXXX";
}
}
class ParentClass
{
public string ParentLabelText { get; set; }
public string ParentMethod()
{
var childObj = new ChildClass();
DialogResult result = ShowDialog();
if (result == DialogResult.Cancel)
{
//update your parent each time you are closing the showdialog window.
this.ParentLabelText = childObj.LabelText;
}
}
}
由于 SRIKANTH