我正在使用C#中的winforms应用程序.我想要实现的是从用户获取我正在使用以下代码的文件:
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
string sFileName = dlg.FileName;
//my code goes here
}
Run Code Online (Sandbox Code Playgroud)
现在,一切正常,但我想在同一个对话框中放入3个单选按钮,这意味着我现在可以从这个对话框中得到两个东西
string sFileName = dlg.FileName; //same as in case of traditional dialog box
//some thing like this which tells which radio button is selected:
dlg.rbTypes.Selected
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
我Microsoft.Win32.OpenFileDialog在我的WPF应用程序中使用选择文件:
var dlg = new Microsoft.Win32.OpenFileDialog
{
Title = "Select configuration",
DefaultExt = ".xml",
Filter = "XML-file (.xml)|*.xml",
CheckFileExists = true
};
if (dlg.ShowDialog() == true)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
根据MSDN截图,Windows 7对话框必须具有现代风格,但我得到了旧的:

像这个问题一样添加清单不起作用.如何显示MSDN中的对话框?
编辑:
首先,我对"原生"解决方案感兴趣,而不是使用第三方组件.
OpenFileDialog的ShowDialog方法返回一个可以为空的布尔值,如果用户单击OK则设置为true,如果单击Cancel,则设置为false.什么时候回来null?文档没有说.
我一直在网上搜索,不幸的是从未遇到过像我一样的问题,所以这里有:
我的C#WPF应用程序不会向我显示OpenFileDialogs或SafeFileDialogs.
private void btnBrowseNet_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.CheckPathExists = true;
ofd.Multiselect = false;
ofd.Title = "Open Network Configuration Batch file...";
ofd.ValidateNames = true;
ofd.Filter = "Comma Seperated Value Files|*.csv";
if (ofd.ShowDialog() == true)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
这个确切的代码在一个场合完全符合它应该做的事情,几乎五分钟之后我可以点击按钮我想要的任何事情都没有发生但是鼠标指针变成了一个忙碌的指示器然后什么都没有.我可以单步执行该方法或执行此类操作
bool? shown = ofd.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
但无论如何,对话框都不会显示.当然,在这种情况下显示将是错误的.我昨天浪费了一个半小时的搜索,当我退出时,我再次尝试了它,突然间它起作用了.有时候它有效,有时则不然.但它似乎是项目特定的,因为我可以将相同的代码粘贴到一个新项目中,它的工作方式就像它应该做的那样.此外,这是该项目唯一似乎有点可疑的事情.其他一切都按预期工作.
有没有人在这里经历过类似的事情,从而了解我到底能做什么?任何帮助都应该受到高度赞赏.
我想显示一个允许用户选择快捷方式(.lnk)文件的对话框.我的问题是对话框尝试获取快捷方式指向的文件/ URL,而不是.lnk文件本身.
如何让它允许选择.lnk文件?
我正在使用加载图像
OpenFileDialog open = new OpenFileDialog();
Run Code Online (Sandbox Code Playgroud)
选择文件后,"打开"将填充多个项目,包括路径.
现在我想将文件加载到文件流(或类似的东西)中,通过网络服务发送......这可能吗?
谢谢
我正在开发一个基于swing的应用程序,我正在使用许多FileDialogs?所以我说为什么不制作一个FileDialog对象而不是所有这些实例并在整个项目中使用它?这是一个很好的假设吗?这会有任何性能提升吗?
谢谢
我的程序有一个按钮,当点击它打开一个openfiledialog来选择一张图片:
private string ChoosePicture()
{
fDialog.Title = "Select Picture";
fDialog.Filter = "Image Files (*.bmp, *.gif, *.jpg)|*.bmp; *.gif*;*.jpg";
fDialog.InitialDirectory = "C:";
fDialog.ShowDialog();
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
//returns a string for the directory
return fDialog.FileName.ToString();
}
Run Code Online (Sandbox Code Playgroud)
使用dialogresult框上的检查还没有解决我的问题:
fDialog.AddExtension = true;
fDialog.CheckFileExists = true;
fDialog.CheckPathExists = true;
DialogResult res = fDialog.ShowDialog();
if (res == DialogResult.OK)
{
//returns a string for the directory
return fDialog.FileName.ToString();
}
return null;
Run Code Online (Sandbox Code Playgroud)
如果我选择图片并完成文件选择,代码可以正常工作.但是,如果我在两者之间的任何时候取消该过程,我会得到例外情况"路径不是合法形式".我不确定哪个部分我想象我可以用a来处理这个问题try-catch,但是我不肯定哪个部分导致了这个问题?如果我try catch调用ChoosePicture()方法,我至少可以阻止它崩溃程序,但是当fdialogbox中没有选择图片时仍然会抛出异常.
在我的应用程序的第一次启动时,我需要指定一个路径来保存一些文件.但在打开文件对话框中,似乎我必须选择要打开的文件.我怎样才能指定一个文件夹而不用像C:\ config \那样选择文件
这是我的代码
If apppath = "" Then
Dim fd As OpenFileDialog = New OpenFileDialog()
fd.Title = "Select Application Configeration Files Path"
fd.InitialDirectory = "C:\"
fd.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
fd.FilterIndex = 2
fd.RestoreDirectory = True
If fd.ShowDialog() = DialogResult.OK Then
apppath = fd.FileName
End If
My.Computer.FileSystem.WriteAllText(apppath & "apppath.txt", apppath, False)
End If
Run Code Online (Sandbox Code Playgroud)
我需要选择一个文件才能使它工作,但我只想选择一个文件夹.那么解决方案是什么?
这是我拥有的一些代码的简化版本。在第一帧中,用户使用“tk.filedialog”选择一个 csv 文件,该文件将绘制在画布上的同一帧上。
还有第二个框架能够绘制图表,以便在不同的框架上更容易地进行绘制。
运行此版本的代码会导致错误:“ValueError:无效的文件路径或缓冲区对象类型:”。我不确定如何让这段代码在不发生此问题的情况下工作,以便用户选择的文件在带有“a”和“b”列的空图表上绘制。
import csv
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
from tkinter import messagebox
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
fig = Figure(figsize=(5,4), dpi=100)
ax= fig.add_subplot(111)
LARGE_FONT= ("Verdana", 12)
class GUI(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "GUI")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (Home, Graph):
frame …Run Code Online (Sandbox Code Playgroud)