c# - 自定义控件和事件处理?

标签 c# winforms custom-controls

我有一个 windows 自定义控件,它的默认面板 上有一个图片框 和一个按钮。此 windows 自定义控件 将添加到 windows 窗体。还有另一种名为 form2 的 Windows 窗体。当用户双击自定义控件时,它应该加载 form2。在设计器中,当我双击窗体上的自定义控件时,它会为该自定义控件创建一个 load() 事件。但我需要双击事件,如何实现?

enter image description here

这是发生了什么的图形 View enter image description here

这是控件中的代码

    [DefaultEvent("DoubleClick")]
public partial class cntrlImageLoader : UserControl
{
    public cntrlImageLoader()
    {
        InitializeComponent();
    }

    private void btnBrowse_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.InitialDirectory = Environment.SpecialFolder.MyPictures.ToString();
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            pbImage.Image = Image.FromFile(ofd.FileName);
        }
    }

    private void pbImage_Click(object sender, EventArgs e)
    {
        this.cntrlImageLoader_DoubleClick(pbImage, e);
    }

    private void cntrlImageLoader_Load(object sender, EventArgs e)
    {

    }

    private void cntrlImageLoader_DoubleClick(object sender, EventArgs e)
    {

    }
}

这里是form1的调用代码

private void cntrImLdrFront_DoubleClick(object sender, EventArgs e)
{
     //this.cntrImLdrFront.pbImage.DoubleClick += new EventHandler(pbImage_DoubleClick);

}

FrmImageViewer f; // this is form2
private void pbImage_DoubleClick(object sender, EventArgs e)
{
    f= new FrmImageViewer();
    f.MdiParent = this.MdiParent;
    f.Show();
}

最佳答案

在类声明处分配属性 [DefaultEvent("DoubleClick")]

[DefaultEvent("DoubleClick")]
public partial class MyControl : UserControl
{
}

这将创建您在设计时已放置用户控件的地方双击控件时默认设置的事件。

已编辑:

[DefaultEvent("LoadPicture")]
public partial class cntrlImageLoader : UserControl
{
    public delegate void LoadPictureEventHandler(object sender, LoadPictureEventArgs e);
    public event LoadPictureEventHandler LoadPicture;

    private void pbImage_DoubleClick(object sender, EventArgs e)
    {
        if (LoadPicture != null)
        {
            LoadPictureEventArgs ev = new LoadPictureEventArgs();
            LoadPicture(this, ev);
            if (ev.Picture != null)
            {
                pbImage.Image = ev.Picture;
            }
        }
    }          
}

创建另一个类并将该类名称赋予 LoadPictureEventArgs

public class LoadPictureEventArgs : EventArgs
{
    public Image Picture {get; set;}
    public LoadPictureEventArgs(Image _picture)
    {
        Picture = _picture
    }
    public LoadPictureEventArgs()
                    : base()
    {
    }
}

如何使用它?

//FORM1
private void cntrImLdrFron_LoadPicture(object sender, LoadPictureEventArgs e)
{
    Image img = null;
    //LOAD YOUR IMAGE HERE
    e.Picture = img;

}

关于c# - 自定义控件和事件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195334/

相关文章:

C# 异步 Web 服务器 - 如何将数据发送到客户端

c# - XSP4 本地主机不响应 (Windows 8.1)

C# 使用正则表达式解析字符串 - 数字与字母相邻

c# - 数据表 Select() 方法

c# - 在 WPF 中使用枚举作为依赖属性

c# - 将系统日期和时间转换为整数

c# - 如何将我自己的主题应用到我的 Windows 窗体应用程序中?

c# - 将数据从服务器发送回客户端

jquery - Ryan Fait 自定义表单元素插件。多个 CSS 类问题

WPF - 自定义控件 + ICommand(如何实现)?