代码之家  ›  专栏  ›  技术社区  ›  mahesh

两个窗体之间的访问事件处理程序

  •  0
  • mahesh  · 技术社区  · 14 年前

    我想在窗体2中访问窗体1的事件处理程序

    :-

     private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    

    如何实现?.

    4 回复  |  直到 14 年前
        1
  •  3
  •   Oded    14 年前

    你做错了什么。

    如果要公开功能,应该创建一个公共方法/函数来公开。您可以从事件处理程序调用此

        2
  •  1
  •   Saeed Amiri    14 年前

    根据您在评论中的问题更新的答案,我没有检查它是否正常工作可能有一个错误: 当您有一个类似的事件时,它很有用,您还可以传递不同的事件参数,最简单的方法是有一个不同的属性来确定每个表单并在其中添加事件 set 方法但是下面是一般的

    public abstract class FormBase : Form
    {
        public virtual event EventHandler MyEventHandler;
    }
    
    public class Form3 : FormBase
    {
        public override event EventHandler MyEventHandler;
        Form2 instance;
        public Form3()
        {
            instance = Form2.Instance;
            instance[this.GetType().ToString()] = this;
            // or 
            //instance["Form3"] = this;
        }
    
        private void dataGridView1_CellEndEdit(object sender, EventArgs e)
        {
            // todo
            if (MyEventHandler != null)
                MyEventHandler(this, e);
        }
    }
    
    public class Form2
    {
        Dictionary<string, FormBase> dic = new Dictionary<string,FormBase>();
    
        public FormBase this[string index]
        {
            get 
            { 
                FormBase retVal = null;
                if (dic.TryGetValue(index, out retVal))
                    return retVal;
                return null;
            }
            set
            {
                FormBase retVal = null;
    
                if (value == null)
                    return;
    
                if (dic.TryGetValue(index, out retVal))
                {
                    try
                    {
                        value.MyEventHandler -= MyEventHandler1;
                    }
                    catch
                    { 
                    }
    
                    retVal = value;
    
                    retVal.MyEventHandler += MyEventHandler1;
                    return;
                }
    
                value.MyEventHandler += MyEventHandler1;
    
                dic.Add(index, value);
            }
        }
    
        private static Form2 instance;
        public static Form2 Instance
        {
            get
            {
                if (instance == null)
                { 
                    instance = new Form2();
                }
                return instance;
            }
        }
    
        private Form2()
        {
        }
    
        private void MyEventHandler1(object sender, EventArgs e)
        {
    
        }
    }    
    
        3
  •  0
  •   A_Nabelsi    14 年前

        4
  •  0
  •   Simon Fischer    14 年前

    另一个选项是在 Form1 Form2 :

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
            DataGridViewCellEventHandler dataGridViewCellEventHandler = new DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
            this.dataGridView1.CellEndEdit += dataGridViewCellEventHandler;
    
            Form2 form2 = new Form2();
            form2.CellEndEdit += dataGridViewCellEventHandler;
        }
    
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //Do something
        }
    }
    
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        public event DataGridViewCellEventHandler CellEndEdit
        {
            add { dataGridViewOnForm2.CellEndEdit += value; }
            remove { dataGridViewOnForm2.CellEndEdit -= value; }
        }
    }
    

    但这需要 表格1 表格2