2014-04-01 20 views
3

我有一個tabControl和每個標籤內的flowLayoutPanel ..當我拖放一個文件到一個標籤上它創建一個按鈕,文件的圖標被刪除。但是,我要創建更多的標籤的選項,我希望能夠拖動文件到所選擇的選項卡..但問題是FlowLayoutPanel的添加按鈕時..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(button);它在第一個選項卡上添加了按鈕,但如果我創建了新選項卡,我不知道如何使用tabControl.SelectedTab和fl_panel.Controls.Add(按鈕)在選定選項卡上正確添加按鈕。

回答

3

你必須創建爲每個標籤中的新FlowLayoutPanel

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

然後,就可以把TabPage的第一個元素的FlowLayoutPanel並訪問Controls從那裏:

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

@ alexAlex:任何運氣?需要更多幫助? –

+0

是的,它很棒!謝謝! –