簡體   English   中英

如何在C#中為多個按鈕重復使用OpenFileDialog方法

[英]How to re-use OpenFileDialog method in C# for multiple buttons

目前,我有以下代碼:

 private void FirstButton_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Reset();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
              //some code
            }

        }

和相同的代碼

private void SecondButton_Click(object sender, EventArgs e)

    {
        Stream myStream = null;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        openFileDialog1.Reset();
        openFileDialog1.InitialDirectory = "c:\\";
        openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        openFileDialog1.FilterIndex = 2;
        openFileDialog1.RestoreDirectory = true;

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
          //some code
        }

    }

我意識到我需要多次重用OpenFileDialog,所以我問如何才能多次調用它?

我已經研究了這些: link1link2

但無濟於事。 先感謝您。

您需要任一方法之外聲明OpenFileDialog

例如,您可以將其設置為字段:

protected OpenFileDialog _openFileDialog = new OpenFileDialog();

然后兩種方法都可以使用它:

// Call this from Form_Load() or some such:
private void InitializeOpenFileDialog()
{
    _openFileDialog.InitialDirectory = "c:\\";
    _openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    _openFileDialog.FilterIndex = 2;
    _openFileDialog.RestoreDirectory = true;
}

private void FirstButton_Click(object sender, EventArgs e)
{
    // not needed now: OpenFileDialog openFileDialog1 = new OpenFileDialog();
    _openFileDialog.Reset();
    if (_openFileDialog.ShowDialog() == DialogResult.OK)
    {
      //some code
    }
}

private void SecondButton_Click(object sender, EventArgs e)
{
    // not needed now: OpenFileDialog openFileDialog1 = new OpenFileDialog();
    _openFileDialog.Reset();
    if (_openFileDialog.ShowDialog() == DialogResult.OK)
    {
      //some code
    }
}

這就是我對評論的意思:

using System;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private System.Windows.Forms.DialogResult dialogFunction()
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Reset();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            return (openFileDialog1.ShowDialog());

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (dialogFunction() == System.Windows.Forms.DialogResult.OK)
            {
             /*do stuff*/   
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (dialogFunction() == System.Windows.Forms.DialogResult.OK)
            {
                /*do stuff*/
            }

        }


    }
}

實際上,您可以為兩次點擊使用完全相同的處理程序

 private void OneClickForAll(object sender, EventArgs e)
        {
            if (dialogFunction() == System.Windows.Forms.DialogResult.OK)
            {
                /*do stuff*/
            }

        }

轉到每個按鈕的屬性

在此處輸入圖片說明

並在事件標簽中

在此處輸入圖片說明

選擇上面的功能(如果兩個按鈕的功能相同,您甚至可以刪除其中一個button_Click功能,然后分配另一個功能。

在此處輸入圖片說明

所以現在你會有類似的東西

private System.Windows.Forms.DialogResult dialogFunction()
{
    Stream myStream = null;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Reset();
    openFileDialog1.InitialDirectory = "c:\\";
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 2;
    openFileDialog1.RestoreDirectory = true;
    return (openFileDialog1.ShowDialog());

}
private void OneClickForAll(object sender, EventArgs e)
{
    if (dialogFunction() == System.Windows.Forms.DialogResult.OK)
    {
        /*do stuff*/
    }

}

如果在dialogResult ==“ OK”的情況下,如果需要對每個按鈕進行差異處理,則可以使用每個按鈕的name屬性,並使用切換語句:

在此處輸入圖片說明

if (dialogFunction() == System.Windows.Forms.DialogResult.OK)
{
    switch (((Button)sender).Name)
    {
        case "button1":
                    /*do stuff for button 1 click*/
                    MessageBox.Show("you clicked button 1");
        break;
        case "button2":
                    /*do stuff for button 1 click*/
                    MessageBox.Show("you clicked button 2");
        break;
        default:                        
        break;        
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM