개발/C#

C# contextmenustrip Control 찾기

FA1976 2019. 7. 12. 09:38

ContextmenuStrip 한개로 여러 Control Listview 나 Listbox 같은 곳에 공통적으로 사용하려고 할때

현재 컨트롤러를 알아야 할 필요가 없다. 모르면.. 여러개를 만들어야 하니까. 그런 무식한 설계는 이제 그만

이럴때 sender 로 Toolstripitem 으로 as 한뒤 그것의 Owner를 찾으면 현재 어느 컨트롤에서 클릭하여  Contextmenustrip 이 사용되어 있는지 알수 있다.. 그것이 바로 아래 코드에서 sourceControl 이고

이것이 Listview 이면 as로 처리하면 된다..

 

            ListView listview = null;

            ToolStripItem menuItem = sender as ToolStripItem;
            if (menuItem != null)
            {
                // Retrieve the ContextMenuStrip that owns this ToolStripItem
                ContextMenuStrip owner = menuItem.Owner as ContextMenuStrip;
                if (owner != null)
                {
                    // Get the control that is displaying this context menu
                    Control sourceControl = owner.SourceControl;
                    listview = sourceControl as ListView;
                }
            } 

 

역시 StackOverFlow가 진리다. ㅎㅎㅎ

https://stackoverflow.com/questions/4886327/determine-what-control-the-contextmenustrip-was-used-on