Вопрос

У меня есть 2 текстовых поля и 2 кнопки [...] рядом с каждым текстовым полем.Можно ли использовать один OpenFileDialog и передать FilePath в соответствующее текстовое поле в зависимости от того, какая кнопка нажата?то есть... если я нажму первую кнопку и загружу диалоговое окно, когда я нажму кнопку «Открыть» диалоговое окно, оно передаст имя файла в первое текстовое поле.

Это было полезно?

Решение

Это сработало для меня (и это проще, чем другие сообщения, но любой из них тоже подойдет)

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

Другие советы

Всякий раз, когда вы думаете: «Есть общая функциональность!» Вы должны рассмотреть метод для его реализации.Это может выглядеть так:

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

Есть несколько способов сделать это.Один из них – иметь 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;
        }
    }
}

Конечно, приведенный выше код должен быть украшен проверками на null, хорошей инкапсуляцией поведения и т. д., но суть вы поняли.

Да, это так, в основном вам нужно сохранить ссылку на кнопку, на которую нажали, а затем сопоставить текстовое поле с каждой кнопкой:

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.
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top