5

C # Mouse Right Click and Control Focus

 2 years ago
source link: https://www.codesd.com/item/c-mouse-right-click-and-control-focus.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C # Mouse Right Click and Control Focus

advertisements

I have a form which users can add controls to and when they right click it brings up a context menu which has an option to display the properties of the control they right clicked on. The problem I am having is trying to decide how to find out what control the user right clicks on since it could be any number of them and then giving that control focus on the form. Does anyone have any good suggestions? Should I just use the (object Sender) portion of a mouse event?

Thanks.


My choice will be using object Sender, most straight forward. Though you need to do casting if you want to have operations on the specific control type.

UPDATE:

If you have a good naming convention or at least for those form controls which need ContextMenu operations, here's how you can do it:

Attaching mouse click event to specific controls or you can write something to attach to all controls by iteration through the form's Controls collection.

label1.MouseClick += new MouseEventHandler(control_RightMouseClick);
label2.MouseClick += new MouseEventHandler(control_RightMouseClick);
label3.MouseClick += new MouseEventHandler(control_RightMouseClick);

Then perform different operations or show different context menu for different controls

void control_RightMouseClick(object sender, MouseEventArgs e)
{
    if (e.Button != MouseButtons.Right)
    {
        return;
    }
    if (sender.GetType().IsSubclassOf(typeof(Control)))
    {
        Control formControl = (Control)sender;
        switch (formControl.Name)
        {
            case "label_1":
                //do something
                contextMenuStrip1.Show(formControl, e.Location);
                break;
            case "label_2":
                //do something else
                contextMenuStrip2.Show(formControl, e.Location);
                break;
            case "label_3":
                //do something else
                contextMenuStrip3.Show(formControl, e.Location);
                break;
            case "panel_1":
                //do something else
                break;
            default:
                //do something else or return or show default context menu
                contextMenuStrip_default.Show(formControl, e.Location);
                break;
        }
    }

    return;
}




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK