контекстное меню для удаления выбранной кнопки

Я создаю пользовательский элемент управления внутри элемента управления вкладками, который содержит потокLayoutPanel на каждой вкладке, перетаскивая файлы на выбранную вкладку. У меня есть контекстное меню для переименования и удаления страниц вкладок, но я также хочу иметь возможность удалить кнопку, созданную, когда я щелкаю по ней правой кнопкой мыши и выбираю «удалить»... Я не могу найти способ удалить только выбранную кнопку. .

Вот что мне нужно для создания кнопок:

  public void Form1_DragDrop(object sender, DragEventArgs e)
    {
        string[] fileList = e.Data.GetData(DataFormats.FileDrop) as string[];

        foreach (string s in fileList)
        {
            var button = new Button();
            path_app = String.Format("{0}", s);
            string filename = path_app;
            file_name = Path.GetFileName(path_app);

          Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(filename);
          Bitmap bmp = icon.ToBitmap();
          CustomControl custom_btn = new CustomControl(button, new Label { Text = file_name });
          button.Tag = path_app;
          button.BackgroundImage = bmp;
          button.BackgroundImageLayout = ImageLayout.Stretch;
          FlowLayoutPanel selectedFLP = (FlowLayoutPanel)tabControl1.SelectedTab.Controls[0];
          selectedFLP.Controls.Add(custom_btn);
          button.Click += new EventHandler(button_Click);

            ContextMenu cm2 = new ContextMenu();
            cm2.MenuItems.Add("Remove", new EventHandler(rmv_btn_click));
            custom_btn.ContextMenu = cm2;
        }
    }

    private void rmv_btn_click(object sender, System.EventArgs e)
    {
        foreach (Control X in fl_panel.Controls)
        {
            fl_panel.Controls.Remove(X);
        }
    }

Как мне получить кнопку, которую я щелкаю правой кнопкой мыши в качестве отправителя в событии rmv_btn_click, чтобы узнать, какую из них удалить?


person alex Alex    schedule 02.04.2014    source источник


Ответы (2)


Если я понимаю, что вы имеете в виду, вам нужно использовать что-то вроде этого.

private void rmv_btn_click(object sender, System.EventArgs e)
{
  fl_panel.Controls.Remove(sender as Button);
}
person Gleb    schedule 02.04.2014
comment
Я думаю, таким образом, отправителем является кнопка «Удалить» из контекстного меню. Мне нужно знать, какую кнопку удалить, когда я щелкаю по ней правой кнопкой мыши и выбираю «Удалить» из контекстного меню. - person alex Alex; 02.04.2014
comment
Вы можете попробовать использовать свойство TabIndex, просто поместите его в EventArgs и используйте RemoveAt() - person Gleb; 02.04.2014
comment
Но как TabIndex поможет мне узнать, какую кнопку я щелкаю правой кнопкой мыши, чтобы удалить? Можете ли вы дать мне более подробную информацию о том, как его использовать? - person alex Alex; 03.04.2014

private void rmv_btn_click (отправитель объекта, System.EventArgs e) {

        Button btn = new Button();
        Label lbl = new Label();
        CustomControl cst_btn = new CustomControl(btn, lbl);
        cst_btn = sender as CustomControl;
        DialogResult dialogResult = MessageBox.Show("Are you sure that you want to remove this object?", "Remove object", MessageBoxButtons.YesNo);
        if (dialogResult == DialogResult.Yes)
        {
            cst_btn.Dispose();
        }
        else if (dialogResult == DialogResult.No)
        {
            //do nothing
        }


    }

    public EventHandler handlerGetter(CustomControl button)
    {
        return (object sender, EventArgs e) =>
        {
            rmv_btn_click(button, e);
        };
    }
person alex Alex    schedule 06.05.2014