using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void SetNum(int i)
{
label4.Text = i.ToString();
}
}
}
主form 代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int discannum =5;
private void Form1_Load(object sender, EventArgs e)
{
Point pt = new Point();
UserControl1[] canctrl = new UserControl1[discannum];
for (int j = 0; j < discannum; j++)
{
canctrl[j] = new UserControl1();
pt.X = j % 3 * 160;
pt.Y = j / 3 * 150;
canctrl[j].Location = pt;
canctrl[j].Click += new EventHandler(canctrl_click);
this.Controls.Add(canctrl[j]);
canctrl[j].SetNum(j);
}
}
private void canctrl_click(object sender, EventArgs e)
{
int i=0;
MessageBox.Show("你点了第" + i + "个控件");
}
}
}
问题是:1我点击控件中空的地方可以响应事件,但是点击上面的字就不响应事件,如果我想在点击控件中lable,也要响应事件该怎么做?2,我怎么知道是点击的是哪个控件?谢谢大家了。
11 个解决方案
#1
这个label上也加事件
#2
如果label上再加事件是不是有点复杂?我这个只4个label,如果有很多呢?点这些label做的事跟点控件空白处做都是一样的啊。
#3
lable的点击中也调用窗体的点击canctrl_click
#4
如果自定义控件中有20个label呢,每个label都要加吗?
#5
我的自定义控件只是个显示用的,想点击任何地方都能调用canctrl_click
#6
添加一个form窗体的点击事件
#7
没看清题目,在自定义的控件中写lable的点击事件
#8
在添加控件时添加绑定一个事件canctrl[j].MouseDown += new EventHandler(Canctrl_MouseDown);
事件private void Canctrl_MouseDown(object sender, MouseEventArgs e)
{
string canctrlName= ((Button)sender).Text;
}
//根据canctrlName就可以判断你点击那个控件了
#9
好像 印象中, WinForm 的 控件,有一个属性:就是用来 不阻挠 父级事件的?
—— 莫非是我 记错了?
—— 莫非是我 记错了?
#10
for(control in controls)
{
if(control is label)
{
...
}
}
#11
你这控件设计有问题啊,你的Click事件是写在Form中的,应该写在控件中
[DefaultEvent("Click")]
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void SetNum(int i)
{
label4.Text = i.ToString();
}
private void UserControl1_Click(object sender, EventArgs e)
{
//事件要做的事
MessageBox.Show("你点了"+this.Name+"这个控件");
}
private void label1_Click(object sender, EventArgs e)
{
OnClick(e);
}
}
}
[DefaultEvent("Click")]
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void SetNum(int i)
{
label4.Text = i.ToString();
}
private void UserControl1_Click(object sender, EventArgs e)
{
//事件要做的事
MessageBox.Show("你点了"+this.Name+"这个控件");
}
private void label1_Click(object sender, EventArgs e)
{
OnClick(e);
}
}
}
#1
这个label上也加事件
#2
如果label上再加事件是不是有点复杂?我这个只4个label,如果有很多呢?点这些label做的事跟点控件空白处做都是一样的啊。
#3
lable的点击中也调用窗体的点击canctrl_click
#4
如果自定义控件中有20个label呢,每个label都要加吗?
#5
我的自定义控件只是个显示用的,想点击任何地方都能调用canctrl_click
#6
添加一个form窗体的点击事件
#7
没看清题目,在自定义的控件中写lable的点击事件
#8
在添加控件时添加绑定一个事件canctrl[j].MouseDown += new EventHandler(Canctrl_MouseDown);
事件private void Canctrl_MouseDown(object sender, MouseEventArgs e)
{
string canctrlName= ((Button)sender).Text;
}
//根据canctrlName就可以判断你点击那个控件了
#9
好像 印象中, WinForm 的 控件,有一个属性:就是用来 不阻挠 父级事件的?
—— 莫非是我 记错了?
—— 莫非是我 记错了?
#10
for(control in controls)
{
if(control is label)
{
...
}
}
#11
你这控件设计有问题啊,你的Click事件是写在Form中的,应该写在控件中
[DefaultEvent("Click")]
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void SetNum(int i)
{
label4.Text = i.ToString();
}
private void UserControl1_Click(object sender, EventArgs e)
{
//事件要做的事
MessageBox.Show("你点了"+this.Name+"这个控件");
}
private void label1_Click(object sender, EventArgs e)
{
OnClick(e);
}
}
}
[DefaultEvent("Click")]
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void SetNum(int i)
{
label4.Text = i.ToString();
}
private void UserControl1_Click(object sender, EventArgs e)
{
//事件要做的事
MessageBox.Show("你点了"+this.Name+"这个控件");
}
private void label1_Click(object sender, EventArgs e)
{
OnClick(e);
}
}
}