2014-04-01 3 views
3

각 탭 내에 tabControl과 flowLayoutPanel이 있습니다. 탭에 파일을 끌어다 놓으면 파일 아이콘이있는 버튼이 만들어집니다. 하지만 난 더 많은 탭을 만들 수있는 옵션이 내가 선택한 탭에 파일을 드래그 할 수있게하려면 ..하지만 버튼을 추가 할 때 문제가 flowLayoutPanel입니다 ..tabControl 내의 FlowLayoutPanel

내 코드 지금까지 :

public Process myProcess = new Process(); 
    FlowLayoutPanel fl_panel = new FlowLayoutPanel(); 

    string path_app; 

    public Form1() 
    { 

     InitializeComponent(); 
    //add the flowLayoutPanel on the first tab 
     fl_panel.Dock = DockStyle.Fill; 
     fl_panel.BringToFront(); 
     tabPage1.Controls.Add(fl_panel); 

     this.DragEnter += new DragEventHandler(Form1_DragEnter); 
     this.DragDrop += new DragEventHandler(Form1_DragDrop); 

    } 

    void Form1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) 
     e.Effect = DragDropEffects.All; 
    } 


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

     foreach (string s in fileList) 
      { 

       Button button = new Button(); 
       button.Click += new EventHandler(this.button_Click); 
       fl_panel.Controls.Add(button); 
       path_app = String.Format("{0}", s); 
       button.Tag = path_app; 
       string filename = path_app; 
       Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(filename); 
       Bitmap bmp = icon.ToBitmap(); 
       button.BackgroundImage = bmp; 
       button.Width = 60; 
       button.Height = 75; 
       button.FlatStyle = FlatStyle.Flat; 
       button.BackgroundImageLayout = ImageLayout.Stretch; 

      } 
    } 
    private void button_Click(object sender, System.EventArgs e) 
    { 
     String path_app = ((sender as Button).Tag as String); 
     myProcess.StartInfo.FileName = path_app; 
     myProcess.Start(); 

    } 

    private void add_tab_btn_Click(object sender, EventArgs e) 
    { 

     //Create new tab with FLP inside 
     string title = Convert.ToString(textBox1.Text); 
     TabPage new_TabPage = new TabPage(title); 
     fl_panel.Dock = DockStyle.Fill; 
     fl_panel.BringToFront(); 
     new_TabPage.Controls.Add(fl_panel); 
     tabControl1.TabPages.Add(new_TabPage); 
    } 
} 

fl_panel.Controls.Add (버튼)을 사용하는 경우; 첫 번째 탭에 버튼을 잘 추가하지만 새 탭을 만들면 fl_panel.Controls.Add (버튼)와 함께 tabControl.SelectedTab을 사용하여 선택한 탭에 버튼을 올바르게 추가하는 방법을 알지 못합니다.

답변

3

당신은 모든 탭에 대한 새로운 FlowLayoutPanel 만들어야합니다 :

FlowLayoutPanel fl_panel = new FlowLayoutPanel(); 
... 
new_TabPage.Controls.Add(fl_panel); 

을 그리고 당신은 FlowLayoutPanelTabPage의 첫 번째 요소를 캐스팅하고 Controls 거기에서 액세스 할 수 있습니다

FlowLayoutPanel selectedFLP = (FlowLayoutPanel)tabControl.SelectedTab.Controls[0]; 
... 
+0

를 @ alexAlex : 행운? 도움이 더 필요하십니까? –

+0

네, 잘 작동합니다! 고맙습니다! –