gpt4 book ai didi

c# - 如何将子控件的所有事件发送给它的父控件(自定义控件)?

转载 作者:行者123 更新时间:2023-11-30 21:55:28 25 4
gpt4 key购买 nike

我有一个包含三个子控件的自定义控件(带有 PictureBox 控件和标签的面板),我想将子控件的所有事件发送到其父控件(自定义控件)。

我知道关于这个问题有很多答案,但我无法用一个简单的解决方案来解决。

这是我的例子

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
UserControl1 uc1 = new UserControl1();
this.Controls.Add(uc1);
}
}

public partial class UserControl1 : UserControl
{
public PictureBox ChildPictureBox { get; set; }

public UserControl1()
{
PictureBox pictureBox1 = new PictureBox();
pictureBox1.Size = new Size(150, 150);
pictureBox1.BackColor = Color.Red;
pictureBox1.Click += PictureBox1_Click;
this.Controls.Add(pictureBox1);
ChildPictureBox = pictureBox1;

this.Click += UserControl1_Click;
}

private void UserControl1_Click(object sender, EventArgs e)
{
MessageBox.Show("User control click");
}

private void PictureBox1_Click(object sender, EventArgs e)
{
MessageBox.Show("pic clicked");
}
}

最佳答案

下面的代码就是例子,这里UserControl1PictureBoxPanel,它们的点击事件被挂接到MainFormMyForm 命名。您可以根据您的要求对其进行修改。

用户控件1.cs

public partial class UserControl1 : UserControl
{
public delegate void PictureBoxClickHandler(object sender, EventArgs e);
public event PictureBoxClickHandler PictureBoxClick;

public delegate void PanelClickHandler(object sender, EventArgs e);
public event PanelClickHandler PanelClick;

public delegate void PictureBoxDoubleClickHandler(object sender, EventArgs e);
public event PictureBoxDoubleClickHandler PictureBoxDoubleClick;

public delegate void PictureBoxMouseMoveHandler(object sender, MouseEventArgs e);
public event PictureBoxMouseMoveHandler PictureBoxMouseMove;

public UserControl1()
{
InitializeComponent();
}

private void pictureBox1_Click(object sender, EventArgs e)
{
if (PictureBoxClick != null)
{
PictureBoxClick(sender, e);
}
}

private void panel1_Click(object sender, EventArgs e)
{
if (PanelClick != null)
{
PanelClick(sender, e);
}
}

private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
if (PictureBoxDoubleClick != null)
{
PictureBoxDoubleClick(sender, e);
}
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (PictureBoxMouseMove != null)
{
PictureBoxMouseMove(sender, e);
}
}
}

我的表格.cs

public class MyForm : Form
{
public MyForm()
{
InitializeComponent();
var userControl1 = new UserControl1();
Controls.Add(userControl1);
userControl1.PictureBoxClick += userControl1_PictureBoxClick;
userControl1.PanelClick += userControl1_PanelClick;

userControl1.PictureBoxDoubleClick+=userControl1_PictureBoxDoubleClick;
userControl1.PictureBoxMouseMove+=userControl1_PictureBoxMouseMove;
}

private void userControl1_PanelClick(object sender, EventArgs e)
{
//Click: Panel on userControl1
}

private void userControl1_PictureBoxClick(object sender, EventArgs e)
{
//Click: PictureBox on userControl1
}

private void userControl1_PictureBoxMouseMove(object sender, MouseEventArgs e)
{
throw new NotImplementedException();
}

private void userControl1_PictureBoxDoubleClick(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}

编辑:

public partial class UserControl1 : UserControl
{

public PictureBox ChildPictureBox { get; set; }

public UserControl1()
{
InitializeComponent();
ChildPictureBox = pictureBox1;
}
//----
}

现在的形式

public class MyForm : Form
{
public MyForm()
{
InitializeComponent();
PictureBox pictureBox = userControl1.ChildPictureBox;
//now work with pictureBox here
pictureBox.Click += pictureBox_Click;
}

private void pictureBox_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}

关于c# - 如何将子控件的所有事件发送给它的父控件(自定义控件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32264298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com