2014-03-31 120 views
0

我有一個tabControl的形式,每個選項卡內有一個flowLayoutPanel,我可以在其中拖放文件,併爲每個放置的文件創建一個按鈕。之後當我點擊一個按鈕時,我打開的文件應該打開。我設法做到這一點只有一個文件..我的問題是我怎麼能告訴哪個按鈕被點擊並打開存儲在每個按鈕的路徑中的文件/應用程序..我怎樣才能區分button_click事件點擊按鈕和應用程序打開的路徑?C# - 創建動態按鈕和事件

規範這部分至今:

Process myProcess = new Process(); 
string path_app; 

public Form1() 
{ 
    InitializeComponent(); 
    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); 
     flowLayoutPanel1.Controls.Add(button); 
     path_app = String.Format("{0}", s); 
    } 
} 

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

也是我的TabControl有添加新的選項卡,但可能性如何,我可以得到所選擇的選項卡,裏面FlowLayoutPanel的知道在哪裏創建按鈕?

順便說一下,我是如何打開文件的問題?我明白,我必須考慮到工作目錄..

謝謝你的幫助!

回答

1

可以利用ButtonTag屬性:

void Form1_DragDrop(object sender, DragEventArgs e) 
{ 
    foreach (String s e.Data.GetData(DataFormats.FileDrop)) 
    { 
     Button button = new Button(); 
     button.Click += new EventHandler(this.button_Click); 
     flowLayoutPanel1.Controls.Add(button); 
     path_app = String.Format("{0}", s); 

     // Add to Tag any data you want to pin to the button 
     button.Tag = path_app; 
    } 
} 

private void button_Click(object sender, System.EventArgs e) 
{ 
    // Obtain via Tag 
    String path_app = ((sender as Button).Tag as String); 

    myProcess.StartInfo.FileName = path_app; 
    myProcess.Start(); 
} 
1

您可以使用button.Tag = "theFancyPath"並在EventHandler中投下object sender as Button以訪問Tag屬性。

如果你需要更多的,那麼你可以從按鍵繼承:

public class ButtonWithPathProperty : Button 
{ 
    public FileInfo PathToOpen { get; private set; } 

    public ButtonWithPathProperty(FileInfo path) 
    { 
     PathToOpen = path; 
     this.Click += new EventHandler(this.button_Click); 
    } 

    private void button_Click(object sender, System.EventArgs e) 
    { 
     var yourPath = this.PathToOpen; 
    } 
} 

這不是測試BTW :)