2014-04-02 3 views
0

선택한 탭의 파일을 드래그하여 모든 탭에서 flowLayoutPanel을 포함하는 탭 컨트롤 내에 사용자 정의 컨트롤을 만듭니다. 상황에 맞는 메뉴에서 탭 페이지의 이름을 변경하고 삭제할 수 있지만, 마우스 오른쪽 버튼을 클릭하고 "제거"를 선택할 때 생성 된 버튼을 삭제할 수 있기를 원합니다. 선택한 버튼 만 삭제할 수있는 방법을 찾을 수 없습니다. .선택한 버튼을 삭제하기위한 상황에 맞는 메뉴

이 내가 버튼을 만들어야 할 것입니다 :

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 이벤트에 보낸 사람으로 그것을 클릭 버튼을받을 수 있나요?

답변

0

개인 무효 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); 
     }; 
    } 
0

나는 무엇을 의미하는지 이해한다면, 이와 같은 것을 사용해야합니다.

private void rmv_btn_click(object sender, System.EventArgs e) 
{ 
    fl_panel.Controls.Remove(sender as Button); 
} 
+0

내가에서 보낸 사람이 버튼 "제거"입니다 이런 식으로 생각을 시도했지만 아무것도 –

+0

을하고 있지 않습니다 컨텍스트 메뉴 .. 마우스 오른쪽 단추로 클릭하고 컨텍스트 메뉴에서 "제거"를 선택하면 삭제할 단추를 알 필요가 있습니다. –

+0

TabIndex 속성을 사용하려고 할 수 있습니다. EventArgs에 넣고 RemoveAt()를 사용하십시오. – Gleb