找到当前在WinForms中接收用户(键盘)输入的控件的首选/最简单方法是什么?
到目前为止,我已经提出以下建议:
public static Control FindFocusedControl(Control control)
{
var container = control as ContainerControl;
return (null != container
? FindFocusedControl(container.ActiveControl)
: control);
}
Run Code Online (Sandbox Code Playgroud)
从表单中,可以简单地称为(在.NET 3.5+中甚至可以将其定义为表单上的扩展方法) -
var focused = FindFocusedControl(this);
Run Code Online (Sandbox Code Playgroud)
这个合适吗?
是否有我应该使用的内置方法?
请注意,使用层次结构时,单次调用ActiveControl是不够的.想像:
Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)
Run Code Online (Sandbox Code Playgroud)
(formInstance).ActiveControl将返回对TableLayoutPanel的引用,而不是TextBox(因为ActiveControl似乎只是在控制树中返回直接活动的子节点,而我正在寻找叶子控件).
在没有指向MSDN的情况下,有人可以简明扼要地解释每个问题的目的以及何时使用它们.(IntPtr,SafeHandle和HandleRef)
在处理大型文本文件时,我遇到了以下(意外)性能下降,我无法解释.我对这个问题的目标是:
int[]
,但MyComplexType[]
MyComplexType
是一个类,而不是结构MyComplexType
包含一些string
属性考虑以下C#
程序:
namespace Test
{
public static class Program
{
// Simple data structure
private sealed class Item
{
public Item(int i)
{
this.Name = "Hello " + i;
//this.Name = "Hello";
//this.Name = null;
}
public readonly string Name;
}
// Test program
public static void Main()
{
const int length …
Run Code Online (Sandbox Code Playgroud) 您对名称空间和赞助商类使用了哪些命名约定?(即包含扩展方法定义的类)
是否有标准/推荐的.NET Framework命名约定?("框架设计指南,第2版"一书仅提供了关于不使用的命名空间的指导).
在阅读了伟大的书籍"框架设计指南"(2008年11月第2版)的附录A"C#编码风格约定"之后,我对微软使用内部/推荐的编码风格感到困惑.
博客文章C#Style的简史声称:
事实上,"StyleCop风格"和"框架设计指南风格"之间的差异相对较小
在我看来,差异是非常明显的.StyleCop说开放式支架应该在一个单独的线上,框架设计指南说它应该在开幕式之后.StyleCop表示所有关键字后面都有一个空格,框架设计指南说"摆脱所有空间"(甚至围绕二元运算符).
我从框架设计指南书中发现这条规则特别具有讽刺意义(第366页,第6条规则):
不要在流控制语句之前使用空格
Run Code Online (Sandbox Code Playgroud)Right: while(x==y) Wrong: while (x == y)
这明确说明StyleCop样式是错误的(while关键字后面的空格,相等二元运算符之前和之后的空格).
最后,使用StyleCop样式格式化的代码与使用Framework Design Guidelines样式格式化的代码具有完全不同的"感觉".通过遵循框架设计指南样式,人们将不得不禁用一堆规则(并且没有规则检查是否遵守框架设计指南样式......).
有人(MSFT内部人士可能?)对这种分歧有所了解吗?
你的团队如何应对这个问题?关注StyleCop?框架设计指南?完全忽略风格?烘焙自己的风格?
我正在考虑通过直接点击MSBuild程序集从Powershell脚本运行MSBuild(而不是查找MSBuild安装路径并启动msbuild.exe作为子进程).
有没有人这样做过?运行构建的最简单,最直接的方法是什么?你想指出哪种技术都有利弊吗?(我对在与脚本的其余部分在同一进程/ appdomain中运行msbuild可能引起的任何问题特别感兴趣).
目前我的想法是这样的:
[void][System.Reflection.Assembly]::Load('Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
[void][Microsoft.Build.BuildEngine.Engine]::GlobalEngine.BuildProjectFile("path/main.proj")
Run Code Online (Sandbox Code Playgroud) 当我尝试使用NSubstitute 1.7.1.0定义的行为Object.ToString(这是一个虚拟方法),NSubstitute被抛出异常.
重现:
[Test]
public static void ToString_CanBeSubstituted()
{
var o = Substitute.For<object>();
o.ToString().Returns("Hello world");
Assert.AreEqual("Hello world", o.ToString());
}
Run Code Online (Sandbox Code Playgroud)
失败:
NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException : Could not find a call to return from.
Make sure you called Returns() after calling your substitute (for example: mySub.SomeMethod().Returns(value)),
and that you are not configuring other substitutes within Returns() (for example, avoid this: mySub.SomeMethod().Returns(ConfigOtherSub())).
If you substituted for a class rather than an interface, check that the call to your substitute was on a virtual/abstract …
Run Code Online (Sandbox Code Playgroud) 以下是一个参考HTML文档,说明了我的问题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Box model test</title>
<style type="text/css">
html,body { margin:0; padding:0; background-color:#808080;}
#box { position:absolute; top:20px; left:20px; background-color:Green; }
#tbl { position:absolute; top:20px; left:40px; background-color:Red; }
.common { width:20px; height:30px; border-bottom:solid 1px black; }
</style>
</head>
<body>
<div id="box" class="common"></div>
<table id="tbl" class="common"></table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
HTML5 doctype和X-UA-Compatible元标记的组合应该将任何现代浏览器切换到它支持的最符合标准的模式.该文档包含两个绝对定位的元素a <div>
和a <table>
.它们并排排列,具有完全相同的宽度,高度和边框CSS.出乎意料的是,我测试的所有浏览器都渲染了这样的文档:
alt text http://img204.imageshack.us/img204/853/screen1tu.png
该<div>
(绿色)如下盒模型.内容区域高30像素(绿色像素),下面有1个像素的边框(总高度为31像素,CSS高度指令被解释为'不包括边框').
<table>
然而,渲染的内容区域高29像素(红色像素),下方有1个像素的边框(整体高度为30像素,因此在这种情况下,CSS高度被解释为'包括边框').
我的问题是,为什么盒子模型有例外(元素的高度不应该包括边界,但它显然有用<table>
)?这是否记录在W3C规范中?我可以将这种行为放在未来吗?
PS:我用IE 7,IE 8,Opera 10.10,Safari …
.net ×5
c# ×4
.net-3.5 ×1
arrays ×1
audio ×1
coding-style ×1
conventions ×1
css ×1
html ×1
interop ×1
msbuild ×1
nsubstitute ×1
performance ×1
powershell ×1
stylecop ×1
winapi ×1
winforms ×1