标题:求高手指导。异地窗体触发主窗体事件问题
只看楼主
shi521min
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-8
结帖率:80%
已结贴  问题点数:10 回复次数:3 
求高手指导。异地窗体触发主窗体事件问题
小白我阐述一下我的问题点:点击主窗体按钮弹出一个Form2,然后在form2上点击按钮弹出form3.我想在form3上通过按钮触发主窗体form1的一个事件。如何实现。目前小弟只能做到在form2上可以触发form1的一个事件。求高手指导。代码如下
Form1代码:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Form3 bc = null;
        public Form1()
        {
            InitializeComponent();
            bc = new Form3();   
            bc.MyEvent += new Form3.MyDelegate(writeplc);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 a = new Form2();
            a.ShowDialog();
        }

        void writeplc()
        {
            this.textBox1.Text += "已单击b窗体按钮\r\n";
        }
    }
}

Form2代码:

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
       public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form3 bd = new Form3();
            bd.ShowDialog();
        }
    }
}

Form3代码:
 namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        public delegate void MyDelegate();      
        public event MyDelegate MyEvent;
        private void button1_Click(object sender, EventArgs e)
        {
            if (MyEvent != null)
                MyEvent();
        }
        }
    }

搜索更多相关主题的帖子: public null 如何 
2015-05-27 18:26
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
构造函数传参你知道吧  你把form1的实例传到form3 就可以了
程序代码:
  private Form1 f1;
        public Form3()
        {
            InitializeComponent();
        }

        public Form3(Form1 frm1)
        {
            InitializeComponent();
            f1 = frm1;//将传过来的Form1全部赋值给f1,这样就可以在这边调用Form1了
       }


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-28 08:16
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:10 
第二种就是委托了 给你个简单明了的例子
程序代码:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        //改变值的事件
        private void frm2_changed(string s)
        {
            //此处是给原有窗体中控件赋值
            this.textBox1.Text = s + s;
        }
        //清空值的事件
        private void frm3_empty(string s)
        {
            this.textBox1.Text = "";
        }
        private void button2_Click(object sender, EventArgs e)
        {
            var frm3 = new Form3();
            //这是委托与事件的第二步,
            //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件
            frm3.changed += new Form3.Form2Handle(frm2_changed);//改变值的事件
            frm3.empty += new Form3.Form2Handle(frm3_empty);//清空值的事件
            frm3.ShowDialog();
        }
    }


 public partial class Form3 : Form
    {
        //定义带参数的委托与两个事件
        //这是委托与事件的第一步
        public delegate void Form2Handle(string s);
        public event Form2Handle changed;
        public event Form2Handle empty;
        public Form3()
        {
            InitializeComponent();
        }
        private void Form3_Load(object sender, EventArgs e)
        {
        }
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            //这是委托与事件的第三步
            //传值
            changed(numericUpDown1.Value.ToString());
        }
        private void button1_Click(object sender, EventArgs e)
        {
            empty(numericUpDown1.Value.ToString());
        }
    }


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2015-05-28 08:17
shi521min
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-8
得分:0 
谢谢版指导,已经OK!感谢
2015-05-29 13:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445846-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020101 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved