Phill Greggan
Phill Greggan

Reputation: 2394

Custom controls and event handling?

I have a windows custom control with a picturebox and a button on it's default panel. This windows custom control will be added to a windows form. There is another windows form called form2. when the user double clicks on the custom control, it should load form2. in designer when i double clicked the custom control on the form, it creates a load() event for that custom control. But i need double click event, how this can be done?

enter image description here

here is the graphical view of what happens enter image description here

Here is code in the control

    [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)
    {

    }
}

Here is the calling code on 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();
}

Upvotes: 2

Views: 296

Answers (1)

Shell
Shell

Reputation: 6849

Assign the attribute [DefaultEvent("DoubleClick")] at the class declaration.

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

This will creates event which you have set by default on double click of control at design time where you have placed your user control.

EDITED:

[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;
            }
        }
    }          
}

Create another class and give that class name to LoadPictureEventArgs

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

HOW TO USE IT?

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

}

Upvotes: 1

Related Questions