我已使用按钮绑定了openFileDialog控件。在按钮事件上,我调用openFileDialog控件。
现在,当我运行我的应用程序时,openFileDialog框会打开但不会选择该文件。打开按钮不起作用。
示例代码:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk_1(object sender, CancelEventArgs e)
{
// logic written here
}
之前工作正常,但现在不能正常工作。
答案 0 :(得分:4)
您需要使用DialogResult
来获取用户打开确认的事件。然后,您可以使用流来读取文件。以下是一些示例代码(由MS在MSDN中提供 - 来源:https://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog(v=vs.110).aspx):
private void button1_Click(object sender, System.EventArgs e)
{
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
// Some logic here
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Failed to open file. Original error: " + ex.Message);
}
}
}
答案 1 :(得分:2)
包含的代码显示方法openFileDialog1_FileOk_1
" _1"最后告诉我你有一些事件绑定事件。也许在某种程度上,方法openFileDialog1_FileOk
引起了冲突。
您应该检查方法是否正确绑定到事件。
为此,我将把你的答案汇给How to change the name of an existing event handler?
对于摘要,您希望查看绑定到事件的方法。您可以从属性面板中执行此操作,也可以通过检查表单设计器文件(名称为.Designer.cs
,例如:Form1.Designer.cs
)来执行此操作。
附录:考虑在事件处理程序中添加断点。它将允许您逐步调试正在发生的事情。此外,它将允许您注意事件处理程序是否未被执行,这表明该方法未正确绑定到事件。
OpenFileDialog
不打开文件,它几乎没有选择它们,并使您的应用程序可以选择执行您的应用程序对这些文件的任何操作。
以下是上面链接的MSDN文章中的使用模式:
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
// Insert code to read the stream here.
}
}
}
catch (Exception ex)
{
MessageBox.Show
(
"Error: Could not read file from disk. Original error: " + ex.Message
);
}
}
现在,观察一下ShowDialog
的结果 - 在关闭对话框后返回 - 后面的代码使用方法OpenFile
来实际打开文件。结果是您可以随意处理的流。
或者,您可以通过属性FileNames
检索所选文件,该属性返回一个字符串数组。如果您已将对话框配置为仅允许选择单个文件,则可以改为使用FileName
。
附录,如果通过" Open"您的意思是调用与所选文件关联的默认应用程序来打开该文件。您可以通过将文件路径传递给System.Diagnostics.Process.Start来完成此任务。
答案 2 :(得分:0)
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string name = openFileDialog1.FileName;
object objOpt = Type.Missing;
var excelApp = new Excel.Application();
Excel.Workbook wbclass = excelApp.Workbooks.Open(name, objOpt,
true,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt,
objOpt);
}