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

C# 窗体中多个按钮共享一个事件,怎么解决?

C# 中有多个相同的按钮,点击之后具有相同的事件,调出另一个窗体,但是一个一个的写太麻烦,有没有多个相同的按钮共享同一个事件的简单方法,求指教!!!1

              
                
                    c#
                    共享
                    按钮
                    同一个事件
                    窗体
                
--------------------编程问答--------------------

            
 private void Form1_Load(object sender, EventArgs e)
        {
            this.Controls.OfType<Button>().ToList().ForEach(x => x.Click += x_Click);//给窗体的所有button注册x_Click事件
        }

        private void x_Click(object sender, EventArgs e)
        {
            MessageBox.Show("hello button.");//点击每一个button都能弹出这个对话框
        }
--------------------编程问答-------------------- 可以
button1.Click += new EventHandler(btnclick);
button2.Click += new EventHandler(btnclick);
...

void btnclick(object sender, EventArgs e)
{
    if (sender == button1)
        // 是单击 button1 产生的
    if (sender == button2)
        // 是单击 button2 产生的
    ...
} --------------------编程问答-------------------- 写到一个事件里,用参数来调用 --------------------编程问答-------------------- 更正,写到一个函数里,用参数来调用 --------------------编程问答-------------------- 在属性里  点 那个 闪电 标  然后 Click  都选那个相同的时间就行了。 --------------------编程问答-------------------- 各按钮执行的事件完全一样吗?那样的话直接通过按住CTRL键同时用鼠标拖源按钮以复制出一个新按钮不就可以让各个按钮都指向同一个事件吗? --------------------编程问答-------------------- 同意2#的。1#的大哥,你写的太凶残了。。。 --------------------编程问答--------------------
引用 5 楼 huanggreat 的回复:
在属性里  点 那个 闪电 标  然后 Click  都选那个相同的时间就行了。


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。 --------------------编程问答-------------------- 同一个按钮,每次都有一个不同的text值,点击按钮后再判断当前text值,根据text不同进行不同的事件 --------------------编程问答-------------------- 有的,button2.PerformClick
 private void button1_Click(object sender, System.EventArgs e)
        { 
              button2.PerformClick();//点击button1按钮触发button2按钮事件
        } --------------------编程问答--------------------
 
private void Form1_Load(object sender, EventArgs e)
        {
var delearray=List<ClickEventDelegate>();//init array
int index=0;
            this.Controls.OfType<Button>().ToList().ForEach(x => {x.Click += delearray[index];index++});//给窗体的所有button注册x_Click事件
        }
 
        private void x_Click(object sender, EventArgs e)
        {
            MessageBox.Show("hello button.");//点击每一个button都能弹出这个对话框
        }
--------------------编程问答-------------------- --------------------编程问答-------------------- 设计器上用ctrl键多选后按回车就行(或者多选后不松ctrl键双击任意一个按钮) --------------------编程问答-------------------- 13楼犀利了,膜拜 --------------------编程问答-------------------- 同意5楼,我也是这么干的 --------------------编程问答--------------------  2楼和13楼的都有借鉴意义 --------------------编程问答--------------------
引用 2 楼 devmiao 的回复:
可以
button1.Click += new EventHandler(btnclick);
button2.Click += new EventHandler(btnclick);
...

void btnclick(object sender, EventArgs e)
{
    if (sender == button1)
        // 是单击 button1 产生的
    if (sender == button2)
        // 是单击 button2 产生的
    ...
}

--------------------编程问答--------------------
引用 7 楼 fengyf_henry 的回复:
同意2#的。1#的大哥,你写的太凶残了。。。



一般代码写多了,都是这么写的,因为这样写比较快,而且在以后维护的时候更好维护。。我们项目里面都是这么写的。 --------------------编程问答-------------------- 绑定同一个事件就好了啊 --------------------编程问答-------------------- 建议楼主参考#6,#13  ,#2的太牛逼 --------------------编程问答--------------------
/// <summary>
        /// 加载书签图书名称信息
        /// </summary>
        public void LoadBookNames() 
        {
            this.flpBookNames.Controls.Clear();
            XmlDocumentDA xmlDoc = new XmlDocumentDA();
            List<string> bookNames = xmlDoc.GetNodeMarkToBookName();
            foreach (string book in bookNames)
            {
                LableMark lableMark = new LableMark(book);
                this.fontTip.SetToolTip(lableMark,lableMark.Text);
                lableMark.Click += new System.EventHandler(BookName_Click);
                this.flpBookNames.Controls.Add(lableMark);
            }
        }

希望能帮助到你! --------------------编程问答-------------------- button1.Click += new EventHandler(button_Click);
button2.Click += new EventHandler(button_Click);

void button_Click(object sender, EventArgs e)
{
    if (sender == button1)  // 是单击 button1 产生的
    {   
    }     
    else if (sender == button2)  // 是单击 button2 产生的
    {
    }
} --------------------编程问答--------------------  private void Form_Load(object sender, EventArgs e)
 {
     button1.Click += new EventHandler(button_Click);
     button2.Click += new EventHandler(button_Click);
 }

void button_Click(object sender, EventArgs e)
{
    //如果需要,可以通过sender识别是哪个按钮下达的,不需要就直接处理即可。
    if (sender == button1)  // 是单击 button1 产生的
    {   
         //do sth if need.
    }     
    else if (sender == button2)  // 是单击 button2 产生的
    {
          //do sth if need.
    }
} --------------------编程问答--------------------
引用 2 楼 devmiao 的回复:
可以
button1.Click += new EventHandler(btnclick);
button2.Click += new EventHandler(btnclick);
...

void btnclick(object sender, EventArgs e)
{
    if (sender == button1)
        // 是单击 button1 产生的
    if (sender == button2)
        // 是单击 button2 产生的
    ...
}


pictureBox2.Click + =new System.EventHandler (pictureBox1_Click);
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            PictureBox pb = sender as PictureBox;
            if (pb.Name =="pictureBox1")
            {

                FormBookInfo fbi = new FormBookInfo();
                fbi.Show();
            }
        }

这是我写的,哪里错了? --------------------编程问答-------------------- 你那样根本就不对.用下面,判断两个对象是不是用一个引用,这样最靠谱
 if(object.ReferenceEquals(sender ,myPicBox))
{
} --------------------编程问答-------------------- 1楼确实很凶残 --------------------编程问答-------------------- 你让那些按钮都去触发一个事件,不就搞定了 --------------------编程问答-------------------- 一楼写得这么好
大家为什么说凶残呢?

另外,其他很多人都没有认真看楼主题目啊
--------------------编程问答--------------------
引用 8 楼 t_kong 的回复:
Quote: 引用 5 楼 huanggreat 的回复:

在属性里  点 那个 闪电 标  然后 Click  都选那个相同的时间就行了。


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。
+1最方便 --------------------编程问答-------------------- 我擦··每个按钮注册同一个单击事件不就完了么······
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,