سؤال

ولقد 2 مربعات النص و 2 زر [...] بجانب بعضها النص. هل من الممكن لاستخدام واحد OpenFileDialog وتمرير أسم دليل على النص منها، والتي على أساسها يتم النقر على زر؟ أي بمعنى ... إذا كنت انقر buttton واحد وlaod الحوار، عند النقر مفتوحة على الحوار، فإنه يمر اسم الملف إلى مربع النص الأول.

هل كانت مفيدة؟

المحلول

وهذا عمل بالنسبة لي (وهذا أبسط من الوظائف الأخرى، ولكن أي منهما سيعمل كذلك)

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

وبطبيعة الحال، يجب أن تكون مزينة رمز أعلاه مع خالية الشيكات والتغليف لطيفة من السلوك وهلم جرا، ولكن تحصل على هذه الفكرة.

ونعم هو، في الأساس تحتاج إلى الحفاظ على إشارة إلى الزر الذي تم النقر عليها، ومن ثم تعيين من مربع نص إلى كل زر:

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