代码之家  ›  专栏  ›  技术社区  ›  alex Alex

tabControl内的FlowLayoutPanel

  •  3
  • alex Alex  · 技术社区  · 12 年前

    我在每个选项卡中都有一个tabControl和一个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(按钮);它在第一个选项卡上很好地添加了按钮,但如果我创建了一个新选项卡,我不知道如何将tabControl.SelectedTab与fl_panel.Controls.Add(button)一起使用,以在所选选项卡上正确添加按钮。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Patrick Hofman Wahid Bitar    12 年前

    你必须创建一个新的 FlowLayoutPanel 对于每个选项卡:

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

    然后,您可以将 TabPage 流程布局面板 并访问 Controls 从那里:

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