在VS .NET中,当您为项目选择文件夹时,会显示一个看起来像OpenFileDialog或SaveFileDialog的对话框,但设置为仅接受文件夹.自从我看到这个以来,我就想知道它是如何完成的.我知道FolderBrowserDialog,但我从来没有真正喜欢那个对话框.它开始太小,不让我利用能够键入路径.
我几乎可以肯定,现在没有办法从.NET做到这一点,但我也很好奇你是如何从非托管代码中做到这一点的.如果没有从头开始完全重新实现对话框,那么如何修改对话框以获得此行为?
我还要重申,我知道FolderBrowserDialog,但有时我不喜欢使用它,除了真正好奇如何以这种方式配置对话框.告诉我只使用FolderBrowserDialog可以帮助我保持一致的UI体验,但不能满足我的好奇心,所以它不会算作答案.
它也不是特定于Vista的东西; 自从VS .NET 2003以来我一直在看这个对话框,所以在Win2k和WinXP中它是可行的.这不是一个"我想知道正确的方法来做这个"的问题,更多的是"我一直很好奇这个,因为我第一次想在VS 2003中这样做"的问题.我知道Vista的文件对话框有一个选项可以做到这一点,但它一直在XP中工作,所以我知道他们做了一些事情让它工作.特定于Vista的答案不是答案,因为问题上下文中不存在Vista.
更新:我接受了Scott Wisniewski的答案,因为它附带了一个工作样本,但我认为Serge指出对话框定制(这无疑是.NET令人讨厌但它确实有效)和Mark Ransom弄清楚MS 是值得称赞的.可能为此任务滚动了一个自定义对话框.
我有一个垃圾目录,我可以在其中下载,一次性项目,电子邮件草稿以及其他可能有用几天但不需要永久保存的东西.为了阻止这个目录接管我的机器,我写了一个程序,它将删除超过指定天数的所有文件,并记录一些关于删除的文件数量及其大小的统计信息,只是为了好玩.
我注意到一些项目文件夹的生存时间比他们应该的长,所以我开始调查.特别是,似乎我使用SVN的项目的文件夹都在附近.事实证明,.svn目录中的只读文件不会被删除.我只是对一个只读文件进行了一个简单的测试,发现System.IO.File.Delete并且System.IO.FileInfo.Delete不会删除只读文件.
我不关心保护这个特定目录中的文件; 如果有重要的东西在那里,它就在错误的地方.是否有可以删除只读文件的.NET类,或者我是否必须检查只读属性并删除它们?
我喜欢在舒适区之外学习语言,但我很难找到一个可以开始使用函数式语言的地方.我听说过很多关于计算机程序的结构和解释的好东西,但是几年前我试图通读它时,它似乎只是在我脑海中徘徊.我的书比网站更好,但是当我访问当地的书店时,LISP上的书看起来有些可怕.
那么什么是一个好的起点?我的目标是能够使用函数式编程语言在6个月左右的时间内解决简单问题,并能够转向更高级的主题,识别何时函数式语言是正确的工具,并使用该语言在2 - 3年的过程中解决更多的问题.我喜欢那些在例子上很重要的书籍,但也包括要完成的挑战.功能语言是否存在这样的事情?
我正在开发一个显示一些子窗口的应用程序,这些窗口可以由用户关闭或自动关闭.在调试一些被抛出的异常时,我发现我试图调用Hide()已经关闭的窗口上的方法; 这个特殊的代码分支在两种情况下都很常见,我没有注意到这一点.
我的第一个想法之一是寻找一个Window可以表明窗户已经关闭的房产.我好像找不到一个.在WinForms中,我会查看IsDisposed属性,以获得表格已关闭的可靠指示(它不能可靠地用于对话框,但我不使用对话框.)我没有看到任何等效的内容Window.该文档Window.Close()似乎并未表明该方法更改的任何属性.我错过了一些明显的东西,或者是唯一一种知道窗口是否已关闭以处理Closed事件的方法?这对于简单的任务来说似乎是一种苛刻的要求.
我正在为一个尚未意识到控件的人做一个例子,ListBox不需要包含字符串; 他一直在存储格式化的字符串并跳过复杂的解析箍,以便将数据从中恢复出来,ListBox我想告诉他有更好的方法.
我注意到如果我有一个对象存储在ListBox然后更新一个影响的值ToString,则ListBox不会自行更新.我试过打电话Refresh和Update控制,但都不起作用.这是我正在使用的示例的代码,它要求您将列表框和按钮拖到窗体上:
Public Class Form1
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
For i As Integer = 1 To 3
Dim tempInfo As New NumberInfo()
tempInfo.Count = i
tempInfo.Number = i * 100
ListBox1.Items.Add(tempInfo)
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each objItem As Object In ListBox1.Items
Dim info As NumberInfo = DirectCast(objItem, NumberInfo)
info.Count …Run Code Online (Sandbox Code Playgroud) 我在Windows 7 x64上使用msysgit.当有一些.gitignore可能忽略的文件时,我无法弄清楚如何告诉Git添加大量文件.例如:
创建包含内容的.gitignore:
*.foo
Run Code Online (Sandbox Code Playgroud)创建文件"test.txt"和"test.foo".
git add .当我尝试这个时,git抱怨test.foo被忽略了,如果我真的想添加它,我应该使用-f.我宁愿做的是添加除了配置为被忽略的文件之外的所有内容.我查看了git-add文档,它看起来像-A应该有帮助; 帮助说,"...并添加所有未被.gitignore机制忽略的未跟踪文件." 没有骰子,当我尝试时我得到同样的错误.使用-f添加被忽略的文件,这不是我想要的.(用例是在忽略.suo和其他文件后从VS项目中大量添加文件.)git add -A .
这是我正在使用的git实现的问题,还是我缺少git-add的一些参数?
一位朋友在确定如何将"Ctrl + +"指定为快捷键时遇到了麻烦ToolStripMenuItem.我指出Keys.OemPlus密钥可以工作,并且需要设置快捷方式的显示字符串,但是Keys枚举使我神秘.
这些"OEM"钥匙有什么用?我做了一点搜索,似乎是因为密钥只在Win2k或更高版本中得到支持,但这看起来很荒谬,因为我确信人们在Win2k之前已经使用过几十年了.为什么没有"OemEquals"?Keys枚举中是否还有其他键完全没有?
我主要想找到这些特殊名称存在的原因的答案,但我很乐意听到有关其他问题的讨论.是否可以安全地假设因为加号位于键盘上的等号顶部,使用Keys.OemPlus并检查Shift修饰键是否可以判断是否单击了Ctrl + =?是否有其他键被省略?
请注意,这不是 WPF问题,尽管System.Windows.Forms.Keys和System.Windows.Input.Key枚举看起来相同(尽管Key根据框架设计指南错误地命名;))
我正在调查使用log4net和System.Diagnostics.Trace日志记录之间的差异,我很好奇我观察到的性能差异.
我创建了一个测试应用程序来比较几种情况下两种日志记录方法的性能,我发现log4net明显慢于Trace类.例如,在我记录1,000条没有字符串格式的消息的情况下,log4net超过1,000次试验的平均执行时间是9.00ms. Trace以1.13ms的平均值执行.我的很多测试用例在log4net执行时间上有很大的差异; 异常长期执行的周期性似乎表明GC干扰.使用CLR Profiler进行探测确认了生成大量log4net.Core.LoggingEvent对象的大量集合(公平地说,它看起来也会Trace生成大量Char[]对象,但它不会显示log4net所做的大差异. )
我在这里要记住的一件事是,尽管log4net似乎慢了大约9倍Trace,但差异是1,000次迭代的8ms; 这并不是一个显着的性能消耗.尽管如此,我的一些预期用例可能是调用数十万次记录事物的方法,这些数字来自我的快速机器.在较慢的机器上,更典型的用户配置,差异是170毫秒到11毫秒,这是一个更微小的警报.
这种性能是典型的log4net,还是有一些可以显着提高log4net性能的问题?
(注意:我知道字符串格式化可以改变执行时间;我试图比较苹果和苹果,我有没有格式化的测试用例和带格式化的测试用例;无论是否使用字符串格式,log4net都保持比例缓慢.)
到目前为止的故事:
Trace类慢得多,我很好奇.我们的一个解决方案的postbuild任务使用xcopy将文件移动到构建工件的公共目录中.出于某种原因,在我的计算机上(以及在我测试的VM上),xcopy失败并显示"拒绝访问".以下是我尝试隔离问题所做的工作:
我错过了什么,除了涉及计算机的偏执阴谋理论让我?这种情况发生在我的开发机器和干净的虚拟机上,但项目中的任何其他人都不会发生这种情况.
这是我很长一段时间的烦恼.
(Nitpicky部分:我更喜欢4个空格字符来表示字符.输入"tab"而不是解释它更容易.当我说"tab"时,我指的是"当你按Tab键时发生的动作",这是可能更简单地称为"增加缩进".)
我在编辑文档时使用smartindent,其中缩进具有一定的意义.在"哑"窗口文本编辑器中,我可以按Shift + Tab删除选项卡,或者更恰当地说,减少当前行的缩进级别.我无法弄清楚如何在Vim中从编辑模式执行此操作; Shift + Tab似乎与Tab相同.
我知道在命令模式下<<会减少缩进.我想在编辑模式下等效.这些是我到目前为止找到的解决方案以及为什么我不喜欢它们,尤其可能是答案的关键.
也许我可以设置一个选项?也许我可以重新左转箭头?(如果需要重新绑定请详细解释;我从未钻研过重新配置(g)Vim.