[英]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,所以我問如何才能多次調用它?
但無濟於事。 先感謝您。
您需要在任一方法之外聲明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.