2010-01-13 56 views
2

我有兩個文本框和每個文本框旁邊的2個按鈕。是否有可能使用一個OpenFileDialog並將FilePath傳遞到相應的文本框,基於哪個按鈕被點擊?即...如果我點擊按鈕並放置對話框,當我單擊對話框上的打開對象時,它會將文件名傳遞給第一個文本框。重複使用OpenFileDialog

+0

這是可能的。也許你可以解釋一下你需要幫助的問題。你想知道哪個按鈕被按下? – 2010-01-13 22:01:31

+0

添加...我尊重@FredrikMörk – 2010-01-13 22:15:19

+0

+1以及其他答案,因爲兩者都可行。 – David 2010-01-13 22:37:26

回答

2

這個工作對我(和它比簡單其他帖子,但其中任何一個都可以)

private void button1_Click(object sender, EventArgs e) 
{ 
    openFileDialog1.ShowDialog(); 
    textBox1.Text = openFileDialog1.FileName; 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    openFileDialog1.ShowDialog(); 
    textBox2.Text = openFileDialog1.FileName; 
} 
+1

如果用戶點擊「取消」,這將無法正常工作。 – 2012-11-06 12:40:16

+0

這是正確的。 @ HansPassant的回答比較好。它檢查DialogResult.OK – David 2012-11-06 13:30:42

3

有幾種方法可以做到這一點。一個是有一個Dictionary<Button, TextBox>保存按鈕及其相關文本之間的聯繫,並使用在該按鈕的點擊事件(這兩個按鈕可以掛接到相同的事件處理程序):

public partial class TheForm : Form 
{ 
    private Dictionary<Button, TextBox> _buttonToTextBox = new Dictionary<Button, TextBox>(); 
    public Form1() 
    { 
     InitializeComponent(); 
     _buttonToTextBox.Add(button1, textBox1); 
     _buttonToTextBox.Add(button2, textBox2); 
    } 

    private void Button_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     if (ofd.ShowDialog() == DialogResult.OK) 
     { 
      _buttonToTextBox[sender as Button].Text = ofd.FileName; 
     } 
    } 
} 

中當然,上面的代碼應該使用空檢查,很好的行爲封裝等等,但你明白了。

2

是的,基本上你需要保持對按鈕的引用被點擊,然後在文本框的每個按鈕的映射:

public class MyClass 
{ 
    public Button ClickedButtonState { get; set; } 
    public Dictionary<Button, TextBox> ButtonMapping { get; set; } 

    public MyClass 
    { 
    // setup textbox/button mapping. 
    } 

    void button1_click(object sender, MouseEventArgs e) 
    { 
    ClickedButtonState = (Button)sender; 
    openDialog(); 
    } 

    void openDialog() 
    { 
    TextBox current = buttonMapping[ClickedButtonState]; 
    // Open dialog here with current button and textbox context. 
    } 
} 
4

每當你想「有共同的功能!你應該考慮一種方法來實現它。它可能看起來像這樣:

private void openFile(TextBox box) { 
     if (openFileDialog1.ShowDialog(this) == DialogResult.OK) { 
      box.Text = openFileDialog1.FileName; 
      box.Focus(); 
     } 
     else { 
      box.Text = ""; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) { 
     openFile(textBox1); 
    }