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

时间:2022-08-30 22:36:30

32 个解决方案

#1


 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都能弹出这个对话框
        }

#2


可以
button1.Click += new EventHandler(btnclick);
button2.Click += new EventHandler(btnclick);
...

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

#3


写到一个事件里,用参数来调用

#4


更正,写到一个函数里,用参数来调用

#5


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

#6


各按钮执行的事件完全一样吗?那样的话直接通过按住CTRL键同时用鼠标拖源按钮以复制出一个新按钮不就可以让各个按钮都指向同一个事件吗?

#7


同意2#的。1#的大哥,你写的太凶残了。。。

#8


引用 5 楼 huanggreat 的回复:
在属性里  点 那个 闪电 标  然后 Click  都选那个相同的时间就行了。


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。

#9


同一个按钮,每次都有一个不同的text值,点击按钮后再判断当前text值,根据text不同进行不同的事件

#10


有的,button2.PerformClick
 private void button1_Click(object sender, System.EventArgs e)
        { 
              button2.PerformClick();//点击button1按钮触发button2按钮事件
        }

#11


 
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都能弹出这个对话框
        }

#12


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

#13


设计器上用ctrl键多选后按回车就行(或者多选后不松ctrl键双击任意一个按钮)

#14


13楼犀利了,膜拜

#15


同意5楼,我也是这么干的

#16


 2楼和13楼的都有借鉴意义

#17


引用 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 产生的
    ...
}

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

#18


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



一般代码写多了,都是这么写的,因为这样写比较快,而且在以后维护的时候更好维护。。我们项目里面都是这么写的。

#19


绑定同一个事件就好了啊

#20


建议楼主参考#6,#13  ,#2的太牛逼

#21


/// <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);
            }
        }

希望能帮助到你!

#22


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 产生的
    {
    }
}

#23


 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.
    }
}

#24


引用 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();
            }
        }

这是我写的,哪里错了?

#25


你那样根本就不对.用下面,判断两个对象是不是用一个引用,这样最靠谱
 if(object.ReferenceEquals(sender ,myPicBox))
{
}

#26


1楼确实很凶残

#27


你让那些按钮都去触发一个事件,不就搞定了

#28


一楼写得这么好
大家为什么说凶残呢?

另外,其他很多人都没有认真看楼主题目啊

#29


引用 8 楼 t_kong 的回复:
Quote: 引用 5 楼 huanggreat 的回复:

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


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。
+1最方便

#30


我擦··每个按钮注册同一个单击事件不就完了么······ C# 窗体中多个按钮共享一个事件,怎么解决?

#31


学习了!刚刚起步,懂得东西不多,巧妙啊!

#32


引用 11 楼 clark523 的回复:
 
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都能弹出这个对话框
        }
  真会扯

#1


 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都能弹出这个对话框
        }

#2


可以
button1.Click += new EventHandler(btnclick);
button2.Click += new EventHandler(btnclick);
...

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

#3


写到一个事件里,用参数来调用

#4


更正,写到一个函数里,用参数来调用

#5


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

#6


各按钮执行的事件完全一样吗?那样的话直接通过按住CTRL键同时用鼠标拖源按钮以复制出一个新按钮不就可以让各个按钮都指向同一个事件吗?

#7


同意2#的。1#的大哥,你写的太凶残了。。。

#8


引用 5 楼 huanggreat 的回复:
在属性里  点 那个 闪电 标  然后 Click  都选那个相同的时间就行了。


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。

#9


同一个按钮,每次都有一个不同的text值,点击按钮后再判断当前text值,根据text不同进行不同的事件

#10


有的,button2.PerformClick
 private void button1_Click(object sender, System.EventArgs e)
        { 
              button2.PerformClick();//点击button1按钮触发button2按钮事件
        }

#11


 
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都能弹出这个对话框
        }

#12


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

#13


设计器上用ctrl键多选后按回车就行(或者多选后不松ctrl键双击任意一个按钮)

#14


13楼犀利了,膜拜

#15


同意5楼,我也是这么干的

#16


 2楼和13楼的都有借鉴意义

#17


引用 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 产生的
    ...
}

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

#18


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



一般代码写多了,都是这么写的,因为这样写比较快,而且在以后维护的时候更好维护。。我们项目里面都是这么写的。

#19


绑定同一个事件就好了啊

#20


建议楼主参考#6,#13  ,#2的太牛逼

#21


/// <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);
            }
        }

希望能帮助到你!

#22


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 产生的
    {
    }
}

#23


 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.
    }
}

#24


引用 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();
            }
        }

这是我写的,哪里错了?

#25


你那样根本就不对.用下面,判断两个对象是不是用一个引用,这样最靠谱
 if(object.ReferenceEquals(sender ,myPicBox))
{
}

#26


1楼确实很凶残

#27


你让那些按钮都去触发一个事件,不就搞定了

#28


一楼写得这么好
大家为什么说凶残呢?

另外,其他很多人都没有认真看楼主题目啊

#29


引用 8 楼 t_kong 的回复:
Quote: 引用 5 楼 huanggreat 的回复:

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


哈哈,这个,说得也太通俗易懂了.....
同意这个,平时我也是用这个的。
+1最方便

#30


我擦··每个按钮注册同一个单击事件不就完了么······ C# 窗体中多个按钮共享一个事件,怎么解决?

#31


学习了!刚刚起步,懂得东西不多,巧妙啊!

#32


引用 11 楼 clark523 的回复:
 
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都能弹出这个对话框
        }
  真会扯