我正在处理的软件的窗口对话框之一看起来有点像这样:(从这个编码恐怖帖子复制的原始屏幕截图,此SO问题上提供的其他示例)
替代文字http://www.codinghorror.com/blog/images/wgetgui-screenshot.png
问题是没有任何选项可以删除(那些已经可以使用的选项),并且它们必须一目了然(即不允许选项卡)编辑:我添加了一条注释,解释了为什么选项卡不是我的具体项目中的选项.
我尝试使用颜色,添加图标,但它只是增加了一个整体的感觉,有人在夏季实习期间使用Visual Studio表单设计器随机丢弃控件.
如何在不删除功能的情况下使这个对话框更加用户友好?
编辑:我采用的GUI示例有很多明显的设计缺陷(参见那些答案1 2),但即使修复了这些(我已经在我正在处理的软件上完成),对话框看起来仍然很难看.
以下是另一个例子(信用).控件(几乎)正确排列,使用适当的控件等,但总体结果仍然很糟糕:
某些应用程序(或网站)会在您键入时计算密码的复杂性.
它们通常显示一个红色条,它变为橙色,然后变为绿色,然后在密码变长时更加绿色,并包含更多类别的字符(例如,小写,大写,标点符号,数字).
如何可靠地计算密码的复杂性?
我已经提出了以下算法,但是我担心它被Password1!评为"非常强"和]@feé:m"弱",因为它只有7个字符长.
private int GetPasswordComplexity(string password)
{
if (password.Length <= 4)
return 1;
int complexity = 0;
int digit = 0;
int letter = 0;
int cap = 0;
int other = 0;
for (int i = 0; i < password.Length; i++)
{
if (char.IsDigit(password[i]) && i!=password.Length-1)
digit = 1;
else if (char.IsLower(password[i]))
letter = 1;
else if (char.IsUpper(password[i]) && i!=0)
cap = 1;
else
other = 1;
}
complexity = digit + letter …Run Code Online (Sandbox Code Playgroud) 我开发了一个.net 3.0应用程序,它使用clickonce部署.
我想从完全信任转向部分信任以简化部署.
我在visual studio的项目"安全"选项卡中尝试了"计算权限"工具,答案非常明确:
---------------------------
Microsoft Visual Studio
---------------------------
This application requires full trust to run correctly.
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚为什么需要完全信任.我试图将安全设置更改为"部分信任",但应用程序在启动时立即引发SecurityException:
System.Security.SecurityException {"Request failed.", Action= "System.Security.Permissions.SecurityAction.LinkDemand"
at MyNameSpace.Program.Main(String[] args)
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
at System.Activator.CreateInstance(ActivationContext activationContext)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, …Run Code Online (Sandbox Code Playgroud) 我知道我可以控制Visual Studio根据类型处理异常的方式,以及最终使用"异常"对话框捕获异常的事实.
但是,ArgumentOutOfRange当我调用特定方法时,我有一个内部抛出(并捕获)异常的库 .抛出异常(并被库捕获)可能有1%的时间,但我正在调用这个方法.编辑说这是设计的(事实上,他们选择的设计是有道理的).
问题是每次抛出异常时我都不希望Visual Studio中断.
ArgumentOutOfRange异常,因为我可能在我的代码中有一些并想要打破这些.有没有办法实现这个目标?我一直在研究属性(例如DebuggerStepThrough),但还没找到足够的东西.
关于如何做到这一点的任何提示?
debugging exception visual-studio-2010 visual-studio visual-studio-debugging
有没有办法检查WinForm在屏幕上是否完全可见(例如,是否超出屏幕范围?)
我已经尝试过使用SystemInformation.VirtualScreen,只要虚拟屏幕是一个矩形就能很好地工作,但是一旦它不是(例如L形状的3个屏幕),SystemInformation.VirtualScreen将返回包含所有的最小矩形.可见像素(因此,虽然它在虚拟屏幕中,但L的右上角的窗口将不可见)
我试图实现这一点的原因是我希望我的程序在他们所在的最后位置打开它的子窗口,但如果用户更改设置,我不希望这些窗口不在视图中(例如从他的笔记本电脑上拔掉额外的屏幕)
这个维基百科页面有一个广泛的散列方法列表
正如你所看到的,MD5和Sha1都被破坏了(在密码学中,"破碎"意味着攻击的复杂程度不如蛮力攻击.换句话说,如果你需要100万年才能找到碰撞而不是10亿年使用蛮力,算法被认为是破碎的,即使它可能仍然安全使用它)
你用什么作为哈希算法?
SHA1已被破坏,但仍需要数十亿年来计算碰撞.
其他哈希仍然没有中断,但我们必须记住,研究人员将精力集中在主流算法(即MD5和SHA1)上,因此不间断的哈希也可能是不安全的.
我知道我可以使用以下查询返回一个空表:
select * from tbFoo where 1=2
Run Code Online (Sandbox Code Playgroud)
但是那段代码对我来说并不好看.
有这种"标准"方式吗?
如果你想知道我为什么要做这么奇怪的事情,那是因为我无法命名我从存储过程返回的数据表,所以我需要空的占位符.
实现INotifyPropertyChanged接口时,每次在类中更新属性时,您都要负责调用PropertyChanged事件.
这通常会导致以下代码:
public class MyClass: INotifyPropertyChanged
private bool myfield;
public bool MyField
{
get { return myfield; }
set
{
if (myfield == value)
return;
myfield = value;
OnPropertyChanged(new PropertyChangedEventArgs("MyField"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler h = PropertyChanged;
if (h != null)
h(this, e);
}
}
Run Code Online (Sandbox Code Playgroud)
这是每个属性12行.
如果一个人能够装饰这样的自动属性会简单得多:
[INotifyProperty]
public double MyField{ get; set; }
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这是不可能的(例如,请参阅msdn上的这篇文章)
如何减少每个属性所需的代码量?
.net c# automatic-properties inotifypropertychanged .net-3.5
虽然新手软件设计师希望他们的用户能够理性行事,但事实并非如此; 我已经多次看到用户感知与现实完全脱节,或者它的反馈显然是不合理的.
我认为我们应该适应,而不是相反.
我知道只有一种方法可以达到这个目的:倾听用户的意见,尤其是他们使用的软件中他们不喜欢的内容.
如果到目前为止我学到了一件事; 他们经常抱怨人们不会想到的事情
你从用户那里学到了什么意想不到的东西?
请考虑以下代码:
private enum myEnum
{
A,
B
}
private void myMethod(myEnum m)
{
switch (m)
{
case myEnum.A:
//do stuff
break;
case myEnum.B:
//do stuff
break;
default:
throw new NotImplementedException(m.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将第三个成员C添加到myEnum,我只会在运行时被NotImplementedException警告
我想做的是让编译器在有未处理的情况并且没有默认情况的情况下警告我:case.
有没有办法做到这一点,或者解决这个问题的其他方法,最终目标是在编译时警告某些东西丢失了?