Silverlight中的SaveFileDialog缺少DefaultFileName属性,导致用户必须手动输入文件名,并从Silverlight应用程序下载每个文件.
这非常令人讨厌,并且有很多批评,请参阅Silverlight论坛.
我的问题是:最优雅的解决方法是什么?
我正在咨询一个大型.Net winforms项目,该项目必须能够以"触摸"模式运行,因此可以使用触摸屏界面进行操作.应用程序架构已经包含扩展逻辑,用于放大标准.Net表单和控件上的字体/显示,自定义控件也可以处理缩放.
问题是应用程序使用OpenFileDialog和SaveFileDialog,它不能使用相同的逻辑进行扩展(这实际上是在递归地调整控件和表单上Font属性的大小).我相信这些对话框本质上是本机Windows对话框,而OpenFileDialog类实际上只是包装类,它们公开了一个标准的.Net接口来与它们进行交互.
一种解决方案可能是为这些事情实现自定义对话框,但这可能是一些广泛的工作.我们真正想做的是以某种方式缩放这个特定对话框的字体大小(可能通过一些P/Invoke窗口处理魔术)?
我知道触摸启用的一个解决方案通常是调整Windows的字体大小,但是这个想法并没有真正吸引这家公司,他们宁愿扩展应用程序本身并使其余的操作系统不受影响.
那么,关于如何将这些对话框扩展为更大的字体的任何经验或想法?或者我们应该咬紧牙关并为此创建自定义对话框?
.net openfiledialog winforms-interop savefiledialog winforms
根据这个答案,我创建了一个自定义DialogHandler来处理从WebBrowser控件中弹出的Javascript警告框.
在Handler连接到一个继承华廷IE浏览器,称为ExtendedIeBrowser.
由于未知原因,watin的DialogHandler会干扰Winforms SaveFiledialogs.该SaveFileDialog自动通过返回DialogResult.Cancel关闭.奇怪的是,Handle()自定义处理程序的调用永远不会被调用.只CanHandle()调用(两次)并返回false,因此根本不应该处理对话框,因此它应该保持打开状态.
有什么我可以做的改变克服这种奇怪的行为吗?
这是ExtendedIeBrowser来源:
public class ExtendedIeBrowser : IE
{
private IntPtr hwnd;
public ExtendedIeBrowser(WebBrowser webBrowserControl) : base(webBrowserControl.ActiveXInstance, false)
{
}
public void Initialize(WebBrowser webBrowserControl)
{
hwnd = webBrowserControl.FindForm().Handle;
StartDialogWatcher();
}
public override IntPtr hWnd { get { return hwnd; } }
protected override void Dispose(bool disposing)
{
hwnd = IntPtr.Zero;
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud)
以下CustomPopupDialogHandler来源:
class CustomPopupDialogHandler : …Run Code Online (Sandbox Code Playgroud) 是否可以避免 SaveFileDialog 中的文件名验证?
var saveFileDialog = new SaveFileDialog {
Filter = "Job package (*.job)|*.job",
CheckPathExists = false,
ValidateNames = false };
var result = saveFileDialog.ShowDialog();
if (result.Value)
{
....my own validation....
}
Run Code Online (Sandbox Code Playgroud)
ValidateNames 属性不起作用。无论如何,当我输入包含无效字符的名称时,对话框会显示它自己的弹出窗口“文件名无效”。我可以避免吗?如何?
我已完成以下代码,使用以下代码将HTML Content(DIV)转换为图像(JPEG,PNG,GIF等)。
<pre>
html2canvas($(".mainbox"), {
onrendered: function(canvas) {
theCanvas = canvas;
document.body.appendChild(canvas);
Canvas2Image.saveAsImage(canvas);
$("#FinalImage").append(canvas);
}
});
</pre>
Run Code Online (Sandbox Code Playgroud)
我还在页面中包含了html2canvas.js,base64.js和canvas2image.js。最后,图像显示在#FinalImageDIV中,浏览器要求我将其保存到驱动器中,直到现在一切正常。
现在的问题是保存的图像名称没有扩展名,每次我需要转到图像并分配扩展名时(“ .jpg”,“。png”等...)。当用户从浏览器保存时,是否有任何解决方案来默认设置扩展名。
提前致谢。
我正在尝试写入刚刚使用 filedialog.asksaveasfile 创建的文件。我将模式设置为“w”。我需要再次打开该文件吗?
f = filedialog.asksaveasfile(mode='w', defaultextension=".csv")
keyList = []
for n in aDict.keys():
keyList.append(n)
keyList = sorted(keyList, key=operator.itemgetter(0,1))
csvWriter = csv.writer(f)
for key in keyList:
sal1 = aDict[(key[0],key[1])][0]
sal2 = aDict[(key[0],key[1])][1]
csvWriter.writerow(key[0], key[1], sal1, sal2)
f.close()
Run Code Online (Sandbox Code Playgroud) 我们正在使用CustomPlacesOpen/SaveFileDialog 的属性向用户显示他们可以使用的各种配置的标准文件夹。
我们现在想要的是让InitialDirectory属性指向创建的CustomPlaces“文件夹”。有没有人能够做到这一点?
我已经阅读了有关FileDialog类(以及子序列 OpenFileDialog 和 SaveFileDialog)、InitialDirectory属性、Environment.SpecialFolder枚举器和KNOWNFOLDERID列表的 MSDN 文章,但都无济于事。
我还尝试将InitialDirectory属性设置为应用程序的名称,以防万一这很神奇。
用于 OpenFileDialog 的代码(目录是 demos atm):
using (OpenFileDialog tempDiag = new OpenFileDialog())
{
tempDiag.CustomPlaces.Add(@"C:\Temp\");
tempDiag.CustomPlaces.Add(@"C:\Program Files\");
tempDiag.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
调用时所需的默认选择tempDiag.ShowDialog();:
我知道可以通过这篇CodeProject文章中描述的方法完全自定义 XOpenDialog ,但我觉得这对于此时的默认选择来说有点极端。
如何阻止System.Windows.Forms.SaveFileDialog提示两次替换所选文件,而只提示一次?
要么我错过了什么,我的安装有问题,或者默认行为只是愚蠢.
var saveFileDialog = new SaveFileDialog();
saveFileDialog.ShowDialog();
// User selects file and clicks "Save" within the dialog
Run Code Online (Sandbox Code Playgroud)
我没有做任何特别的事情,这是一个空的Windows Forms项目,针对的是.NET Framework 4.7.2.
编辑:添加完整的Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var saveFileDialog = new SaveFileDialog();
saveFileDialog.ShowDialog();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下 C# 代码,它使用 SaveFileDialog并将AddExtension属性设置为true:
var dialog = new SaveFileDialog();
dialog.AddExtension = true;
dialog.DefaultExt = "txt";
dialog.Filter = "Text files (*.txt)|*.txt|XML files (*.xml)|*.xml";
dialog.OverwritePrompt = true;
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
label1.Text = dialog.FileName;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试了对话框的以下File name组合Save as type。
File name | Save as type | label1.Text | What I expect
----------------+----------------+----------------+----------------
test1 | *.txt | test1.txt | test1.txt
test2.txt | *.txt | test2.txt | test2.txt
test3.abc | *.txt | test3.abc.txt | …Run Code Online (Sandbox Code Playgroud) savefiledialog ×10
c# ×5
.net ×4
winforms ×2
.net-4.7.2 ×1
asp.net-mvc ×1
file ×1
html5 ×1
html5-canvas ×1
javascript ×1
jquery ×1
mono ×1
python ×1
silverlight ×1
tkinter ×1
validation ×1
watin ×1
wpf ×1