Question

J'ai 2 et 2 textboxes bouton [...] à côté de chaque zone de texte. Est-il possible d'utiliser un OpenFileDialog et passer le CheminFichier à la zone de texte respectif, basé sur quel bouton est cliqué? i.e. ... si je clique buttton un et laod la boîte de dialogue, lorsque je clique sur la boîte de dialogue ouverte, il passe le fileName à la première zone de texte.

Était-ce utile?

La solution

Cela a fonctionné pour moi (et il est plus simple que les autres postes, mais l'un d'eux fonctionnerait aussi bien)

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;
}

Autres conseils

Chaque fois que vous pensez « il y a des fonctionnalités communes! » vous devriez envisager une méthode pour la mettre en œuvre. Il pourrait ressembler à ceci:

    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);
    }

Il y a plusieurs façons de le faire. L'un est d'avoir un Dictionary<Button, TextBox> qui maintient le lien entre un bouton et sa zone de texte connexe, et l'utiliser en cas de clic pour le bouton (les deux boutons peuvent être accrochés au même gestionnaire d'événements):

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;
        }
    }
}

Bien sûr, le code ci-dessus doit être décoré avec null-chèques, belle encapsulation du comportement et ainsi de suite, mais vous voyez l'idée.

Oui il est, fondamentalement, vous devez garder une référence au bouton qui a été cliqué, puis une mise en correspondance d'une zone de texte à chaque bouton:

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.
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top