我非常喜欢杰夫关于斯巴达编程的帖子.我同意这样的代码是一种阅读的乐趣.不幸的是,我不太确定与他们一起工作一定会很愉快.
多年来,我一直在阅读并坚持"一行一线"的做法.当许多编程书籍使用示例代码来反驳这个建议时,我已经打了很好的战斗并坚持了下来:
while (bytes = read(...))
{
...
}
while (GetMessage(...))
{
...
}
Run Code Online (Sandbox Code Playgroud)
最近,出于更实际的原因,我提出了每行一个表达式 - 调试和生产支持.从生产中获取一个声明NullPointer异常的日志文件在"第65行",其中显示:
ObjectA a = getTheUser(session.getState().getAccount().getAccountNumber());
Run Code Online (Sandbox Code Playgroud)
令人沮丧,完全可以避免.没有抓住专家的代码可以选择"最可能"的对象是空的......这是一个真正的实际痛苦.
每行一个表达式在步进代码时也有很大帮助.我是在假设大多数现代编译器可以优化掉我刚创建的所有多余的临时对象的情况下练习的...
我试着整洁 - 但是用明确的对象混乱我的代码确实有时会感到费力.它通常不会使代码更易于浏览 - 但是在生产中跟踪事物或者通过我或他人的代码时,它确实派上了用场.
你提倡什么样的风格,你能在实际意义上理顺它吗?
使用自定义绘制(NM_CUSTOMDRAW)绘制ListView子项的全部内容(在"报表/详细信息"视图中)时,能够在我的自定义绘制方法中应用相同的左右填充,这将是很好的.控制自己的非自定义绘制项目.
有没有办法以编程方式检索此填充值?它是否与特定字符的宽度(""或"w"或其他东西?)有关,还是固定值(左边是6px,右边是3px还是......)或者......?
编辑:为了澄清,我想添加相同的填充到我的NM_CUSTOMDRAWn子项,控件添加到它绘制的项目,并且我正在寻找的度量,例如,第二列的开头之间的空白以下屏幕截图中的"Siamese"一词(注意:MSDN的屏幕截图已添加,以帮助解释我的问题):
.png)
请注意,单词"Siamese"与标题项("Breed")对齐.我希望能够保证自定义绘制项目的对齐方式.
似乎IDataReader.Read()总是至少有一次真实(如果我错了,请告诉我.)那么如果不将它包装在try/catch中,你如何判断它是否没有记录?
我刚刚被分配到使用ASP.net 3.5和MySQL做CMS.我对ASP.NET开发很陌生(C#已经足够了),我想知道当我没有选择使用Microsoft SQL Server时,我失去了什么主要的ASP.NET和一般.NET功能.
我已经从快速谷歌搜索中知道我失去了LINQ(我真的很期待用这个来构建我的模型层!),但我不确定我将丢失哪些其他方便的功能.由于我一直依赖于ASP.net教程,假设您使用MS SQL Server,我觉得我的ASP.net知识中的一小部分变得无效.
谢谢!
最近,我和一位朋友正在谈论在SQL服务器数据库中保护存储过程代码.
从远处的内存中,我很确定在所有版本的SQL Server中"加密"都非常容易被破解,但是他说它在SQL 2005中得到了很大的改进.因此我没有认真考虑它作为安全选项在我曾经做过的任何系统中.
那么在什么样的情况下可以使用"加密",什么时候应该不惜一切代价避免?
在 C# 中,如果我需要打开 HTTP 连接、下载 XML 并从结果中获取一个值,我该怎么做?
为了保持一致性,假设 Web 服务位于 www.webservice.com,并且如果您向它传递 POST 参数 fXML=1,它会返回给您
<xml><somekey>somevalue</somekey></xml>
Run Code Online (Sandbox Code Playgroud)
我希望它能吐出“somevalue”。
听到业务支持者使用术语实时基于网络的系统,这让我很难过.我在房间里变得疯狂,高呼,"网上没有实时的东西!我们在银行业,而不是火箭发射/船舶导航/飞机自动驾驶业务!"
任何人都有比实时更好的性能规格,或其可怕的混合,近实时?
我正在创建一个ToolTip窗口,并使用标志TTF_IDISHWND |为其添加工具 TTF_SUBCLASS.(c ++,win32)
我有一个清单文件,以便我的程序使用新的WindowsXP主题(comctrl32版本6).
当我将鼠标悬停在已注册的工具上时,会出现提示.
好.
当我单击鼠标时,提示消失.
好.
但是,远离工具并再次返回不会使尖端重新出现.我需要将鼠标悬停在不同的工具上,然后返回我的工具以获取提示返回.
当我删除我的清单文件(使用较旧的非XP comctrl32)时,问题就消失了.
在做了一些实验之后,我发现Comctl32版本5(旧版)和Comctl32版本6(新版)中的工具提示之间存在以下差异:
如果鼠标按钮关闭,则新的TTF_TRANSPARENT工具提示(当就地使用时)实际上从WM_NCITTEST返回HTCLIENT,从而获得WM_LBUTTONDOWN并在消失之前暂时关注焦点.这会导致应用程序的边框闪烁.
旧的TTF_TRANSPARENT工具提示始终从WM_NCHITTEST返回HTTRANSPARENT,因此永远不会自己获取WM_LBUTTONDOWN并且永远不会窃取焦点.(这似乎只是审美,但可能影响下一点...)
新工具提示似乎在鼠标单击后不会获得WM_TIMER事件,并且仅在取消激活并重新激活后才恢复获取(一堆)计时器事件.因此,在鼠标单击和释放后,它们不会重新显示其提示窗口.
只需在单击/释放后再次移动鼠标,旧工具提示就会收到WM_TIMER消息,因此他们可以重新显示他们的提示.
因此,作为一个comctl32解决方法,我不得不:
子类TOOLTIPS_CLASS窗口,如果工具要求透明,则始终从WM_NCHITTEST返回HTTRANSPARENT.
避免使用TTF_SUBCLASS而是自己处理鼠标消息,这样我就可以在收到WM_xBUTTONUP时取消激活/重新激活.
我假设内部行为的变化是为了适应工具提示中的新"可点击"功能,如超链接,但悬停行为似乎因此被打破.
有没有人知道比我的子类解决方案更好的解决方案?我错过了其他一些观点吗?
我有C#winforms应用程序,需要不时启动一个外部exe,但我不希望启动另一个进程,如果一个已经运行,而是切换到它.
那么在C#中我将如何在下面的示例中这样做?
using System.Diagnostics;
...
Process foo = new Process();
foo.StartInfo.FileName = @"C:\bar\foo.exe";
foo.StartInfo.Arguments = "Username Password";
bool isRunning = //TODO: Check to see if process foo.exe is already running
if (isRunning)
{
//TODO: Switch to foo.exe process
}
else
{
foo.Start();
}
Run Code Online (Sandbox Code Playgroud) 当应用程序位于其他应用程序后面并且我单击我的应用程序的任务栏图标时,即使打开了app-modal,WS_POPUP对话框,我也希望整个应用程序位于z-order的顶部.
但是,有些时候,对于我的一些(和其他人)对话框,只有对话框出现在前面; 应用程序的其余部分留在后面.
我看过Spy ++,对于那些工作正常的,我可以看到WM_WINDOWPOSCHANGING被发送到对话框的父级.对于留下应用程序其余部分的那些,WM_WINDOWPOSCHANGING不会被发送到对话框的父级.
我有一个例子,其中一个对话框通常带有整个应用程序,而另一个没有.工作对话框和非工作对话框都具有相同的窗口样式,子样式,父级,所有者,个体发生.
简而言之,两者都是使用DialogBoxParam()创建的WS_POPUPWINDOW窗口,它们传入了与第三个参数相同的HWND.
有没有人注意到Windows程序中的这种行为奇怪?单击按钮时,TaskBar会向应用程序发送什么消息?谁负责确保所有应用程序的窗口都出现在前台?
在我的情况下,基础父母是一个MDI框架...以某种方式影响这个因素?
c# ×3
winapi ×3
windows ×2
.net-3.5 ×1
ado.net ×1
architecture ×1
asp.net ×1
custom-draw ×1
encryption ×1
listview ×1
mysql ×1
spartan ×1
sql-server ×1
styles ×1
web-services ×1
winforms ×1
xml ×1