当前位置:编程学习 > C#/ASP.NET >>

父窗体调用子窗体内的一个方法,方法改变一个文本框的值(反射)

父窗体调用一个已打开的子窗体,用反射执行激活子窗体的一个方法,该方法改本一个文本框的值,我已能实现调用到子窗体内的方法,可是文本框的值就是改变不了,放一个MessageBox也能弹出来,代码如下:
父窗体
        private void dockPanel1_ActiveDocumentChanged(object sender, EventArgs e)
        {
            DockPanel aa = (WeifenLuo.WinFormsUI.Docking.DockPanel)(sender);
            Form CC = (Form)aa.ActiveDocument;
            Type type = CC.GetType();
            object obj = type.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { });

            //调用没有返回值的方法
            //运行之后的结果[Hello World]
            try
            {
                type.InvokeMember("button2_Click1", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, null);
            }
            catch (Exception EE)
            {
                MessageBox.Show(EE.Message, "系统提示!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
子窗体
        public void button2_Click1()
        {
            this.textBox1.Text = "111";
            MessageBox.Show("eee");

        } --------------------编程问答-------------------- hi  此对象非彼对象。 --------------------编程问答-------------------- 能否说清楚一点 --------------------编程问答-------------------- 就这么点事为嘛要反射?不能弄得简单点么 --------------------编程问答-------------------- 就这么点事为嘛要反射?不能弄得简单点么 --------------------编程问答--------------------
引用 2 楼  的回复:
能否说清楚一点

私信不知怎么的发不过去。

这个原因是,你调用的方法与正在显示的窗体并不是同一个对象。
使用GetType确实能得到一个方法,也能够调用。
假如aa.Click1是你想调用的,使用Type.InvokeMember("Click1")只不过是说你要调用Click1的方法,这并不是aa.Click1.

想要调用Click1为什么不直接aa.click1, 还要用反射呢? --------------------编程问答-------------------- 把Form改成单例模式 --------------------编程问答-------------------- 不用反射,用委托时间:
主窗体:

private void ChangeTextBox(string test)
{
    textBox1.Text = test;
}

.....
Form2 frm = new Form2();
frm.ChangeTextBoxHandlerEvent += new Form2.ChangeTextBoxHandler(ChangeTextBox);

子窗体:

public delegate void ChangeTextBoxHandler(string test);
public event ChangeTextBoxHandler ChangeTextBoxHandlerEvent;

//改变值的方法:
if(ChangeTextBoxHandlerEvent != null)
{
    ChangeTextBoxHandlerEvent(value);
}
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,