我SaveFileDialog用来选择我想要保存文件的路径.我设置InitialDirectory为某个文件夹,但我想将保存位置限制为该文件夹或该文件夹的子文件夹.这可能吗?
SaveFileDialog dialog = new SaveFileDialog();
dialog.InitialDirectory = "SomePath"//this is the path that I want to be root folder
Run Code Online (Sandbox Code Playgroud) 我正在尝试对用户输入的文件名进行扩展SaveFileDialog和FileOpenDialog强制执行.我已尝试使用问题389070中提出的示例,但它无法按预期工作:
var dialog = new SaveFileDialog())
dialog.AddExtension = true;
dialog.DefaultExt = "foo";
dialog.Filter = "Foo Document (*.foo)|*.foo";
if (dialog.ShowDialog() == DialogResult.OK)
{
...
}
Run Code Online (Sandbox Code Playgroud)
如果用户test在文件test.xml恰好存在的文件夹中键入文本,则对话框将建议名称test.xml(而我真的只想*.foo在列表中看到).更糟糕的是:如果用户选择test.xml,那么我确实会得到test.xml输出文件名.
如何确保SaveFileDialog真正只允许用户选择*.foo文件?或者至少,当用户点击时,它会替换/添加扩展名Save?
建议的解决方案(实现FileOk事件处理程序)只执行部分工作,因为Save如果文件名具有错误的扩展名,我真的想要禁用该按钮.
若要保留对话框并更新FileOk处理程序中文本框中显示的文件名,以反映具有正确扩展名的新文件名,请参阅以下相关问题.
OpenFileDialog的ShowDialog方法返回一个可以为空的布尔值,如果用户单击OK则设置为true,如果单击Cancel,则设置为false.什么时候回来null?文档没有说.
在显示保存对话框时,我想挂钩用户的过滤器类型更改并自动更改文件扩展名.(例如像MSPaint的"另存为"操作.)
使用TSaveDialog并设置UseLatestCommonDialogs:= False,我可以通过以下代码处理此问题.(没有最新的常见对话支持,cource.)
procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
FName, Ext: string;
begin
with TSaveDialog(Sender) do
begin
if DirectoryExists(FileName) then // FileName is Empty
exit;
case FilterIndex of
1: Ext := '.png';
2: Ext := '.bmp';
3: Ext := '.jpg';
end;
FName := ChangeFileExt(ExtractFileName(FileName), Ext);
SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
end;
end;
Run Code Online (Sandbox Code Playgroud)
我想用Delphi 2007支持XP和vista/7.
我应该使用TFileSaveDialog而不是TSaveDialog与内部包装器?(我必须使用IFileDialogControlEvents来解决COM编程问题?)
或者我可以用TFileSaveDialog实现这一点,它只是标准属性吗?(我的开发环境仍然在XP机器上,所以我从未尝试过.抱歉.)
我认为这是非常常见的任务,但我找不到任何支持Vista/7的示例代码......
我一直在网上搜索,不幸的是从未遇到过像我一样的问题,所以这里有:
我的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)
但无论如何,对话框都不会显示.当然,在这种情况下显示将是错误的.我昨天浪费了一个半小时的搜索,当我退出时,我再次尝试了它,突然间它起作用了.有时候它有效,有时则不然.但它似乎是项目特定的,因为我可以将相同的代码粘贴到一个新项目中,它的工作方式就像它应该做的那样.此外,这是该项目唯一似乎有点可疑的事情.其他一切都按预期工作.
有没有人在这里经历过类似的事情,从而了解我到底能做什么?任何帮助都应该受到高度赞赏.
在我的主窗体中,我有一个名为SavePDFDocument()的方法:
private void SavePDFDocument()
{
PDFWrapper pdfWrapper = new PDFWrapper();
pdfWrapper.CreatePDF(horizontalPictureScroller1.GetPictures(), "pdfDocument.pdf");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,现在我手动输入文件的名称.我想请用户选择保存位置以及提供它的名称.
这是我上面使用的CreatePDF()方法:
public void CreatePDF(List<System.Drawing.Image> images, string filename)
{
if (images.Count >= 1)
{
Document document = new Document(PageSize.LETTER);
try
{
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));
// step 3: we open the document
document.Open();
foreach (var image in images)
{
iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
if (pic.Height …Run Code Online (Sandbox Code Playgroud) var dlg = new SaveFileDialog();
dlg.FileName = "graph";
dlg.DefaultExt = ".bmp";
dlg.Filter = "PNG|*.png|DOT|*.dot|Windows Bitmap Format|*.bmp|GIF|*.gif|JPEG|*.jpg|PDF|*.pdf|Scalable Vector Graphics|*.svg|Tag Image File Format|*.tiff";
Run Code Online (Sandbox Code Playgroud)
扩展名始终默认为.png.DefaultExt如果有的话,似乎被忽略了Filter; 那么它只是默认为列表中的第一个选项.
有没有办法强迫它真正尊重默认的分机?
我写这个代码来获取fileName来保存我的文件:
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
OPENFILENAME ofn;
char szFileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = (LPCWSTR)L"Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
ofn.lpstrFile = (LPWSTR)szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt = (LPCWSTR)L"txt";
GetSaveFileName(&ofn);
printf("the path is : %s\n", ofn.lpstrFile);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但输出是:
the path is : H
Run Code Online (Sandbox Code Playgroud)
为什么?难道我做错了什么 ?
我在Windows 7上使用Visual Studio 2008.
我正在开发以xpdl格式导出数据.有两个选项 - 版本2.1和2.2.我正在使用SaveFileDialog,但我如何区分这2个选项?
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "xpdl 2.1|*.xpdl|xpdl 2.2|*.xpdl";
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//how can I check, which format is selected?
}
Run Code Online (Sandbox Code Playgroud) 我试图将我的.NET应用程序设置文件保存到用户的%MyDocument%\ MyApplication文件夹,但我不知道如何检查现有的文件夹\文件,并在保存时创建或附加文件夹\ file.我不想打开saveFileDialog,因为我需要文件在所有用户计算机上的相同位置.这是我到目前为止所做的,但它不起作用.任何帮助,将不胜感激:
var saveSettings = settingsList.text; //assign settings to a variable
saveSettings = Regex.Replace(saveSettings, @"\s+", "").Trim() + Environment.NewLine; //remove any extra spaces and add a carriage return so that each setting is on a new line
var fileName = string.Format("{0}\\{1}", Environment.SpecialFolder.MyDocuments + "\\MyApp\\", "settings.dat"); //generate path to settings.dat
File.AppendAllText(fileName, saveSettings); //save settings.dat
Run Code Online (Sandbox Code Playgroud)