首页 新闻 赞助 找找看

c# 窗口2调用窗口1的事件

0
悬赏园豆:50 [已关闭问题]

问题是这样的 我想在form2 里面点一个按钮 执行form1的一个按钮的事件 怎么弄~~
我把form1的按钮事件制成pubilc,然后form1 f1 = new from1 在 f1.这个事件,这样不行~请大家帮帮忙。

苏日图的主页 苏日图 | 初学一级 | 园豆:150
提问于:2009-08-28 13:49
< >
分享
其他回答(3)
0

例如Form1中存在Click事件,在Click中添加一个方法OnClick触发事件

public void OnClick(...)

{

  Click(this, new EventArg...())

}

在Form2中加一个成员变量Form parentForm;

建立Form2的时候把Form1传给Form2,然后在Form2中parentForm.OnClick(...)

Yuxin Yang | 园豆:215 (菜鸟二级) | 2009-08-28 13:58
0

回调函数。也就是委托

在form2中声明一个public 委托、声明委托对象。form中声明form2对象的时候。初始化委托对象。

例子

        delegate void DemoDeletegate();//命名空间下


        DemoDeletegate _demoDeletegate;
       
        public DemoDeletegate Demodeletegate
        {
            set { _demoDeletegate = value; }
        }

        public Form2()
        {
            InitializeComponent();
        }
     
        private void button1_Click(object sender, EventArgs e)
        {//调用委托对象
            _demoDeletegate();
        }

form1 中的代码

    private void  show

        {
            Form2 f2 = new Form2();
            f2.Demodeletegate += new DemoDeletegate(Methods);
        }
        private void Methods()
        {
            this.BackColor = Color.Red;
        }

ok

邢少 | 园豆:10926 (专家六级) | 2009-08-28 15:00
0

这属于类间的通信方法,大概有以下几种方案

1.正向获取,同1楼,Form1暴露出一个方法,再传递参数过去,确定不知道数据什么时候准备好了

2.反向获取

  1)通过类的静态变量传递数据,把调用放回Form2,缺点:性能不好,违反oop原则

      2)通过堆栈对象复制数据通信,把调用放回form2,具体实现同2.1差不多,但装箱后安全性上来了

  3)事件机制,同二楼,这个最常用了

 

看CSDN上一篇文章总结的,详细原文可以去搜搜 就叫 类间通信,里面有详细讲解

申玉宝@三月软件 | 园豆:160 (初学一级) | 2009-08-28 21:11
0

不用那么麻烦的, 这样就行了,

你不是想在form2 里面点一个按钮 执行form1的一个按钮的事件 怎么弄吗

你要先在Form2里这样写

form1 f1 = new from1

f1.objform2=this;

f1.show();//

在Form2里的定义一下form2 

objform2= new form2();

 

现在再用objform2调用form2里的事件就可以了,不行的话再问我,呵呵就是这样的,我以前就是这样用的,用了几年了,呵呵

 

苏飞 | 园豆:2024 (老鸟四级) | 2009-08-29 21:32
主要是你没有把两个对象对应起来都不是一个对象当然是不用显示的啊, 像我这样的就可以了
支持(0) 反对(0) 苏飞 | 园豆:2024 (老鸟四级) | 2009-08-29 21:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册