我有一个TreeView,允许用户通过选中或取消选中每个项目的复选框来选择分层数据的某些元素.目前,我在有孩子的节点上禁用了使用其他问题的复选框隐藏技术的框,如下所示:
? Node 1
? Node 2
• Node 3
? Node 3.1
? Node 3.2
• Node 4
? Node 4.1
? Node 4.2
Run Code Online (Sandbox Code Playgroud)
但更好的解决方案是为父节点使用三态复选框,如下所示:
? Node 1
? Node 2
? Node 3
? Node 3.1
? Node 3.2
? Node 4
? Node 4.1
? Node 4.2
Run Code Online (Sandbox Code Playgroud)
由于此功能在Win32中可用,我的问题是如何在不自己绘制框的情况下执行此操作(例如,作为用户绘制的控件或使用图像列表).我根本不熟悉Win32 API; 如何扩展上面链接的技术以在托管的TreeView控件上启用三态checbox?
我有一个针对.NET Framework 3.5的Visual Studio 2010项目.该项目从Visual Studio构建良好,但当我尝试从命令行或从TeamCity编译它时,我得到以下构建错误:
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFX.targets(269,9):错误MC1000:未知的生成错误,'无法解析对程序集的依赖性'Microsoft.Windows.Design.Extensibility,Version = 4.0.0.0,Culture = neutral,PublicKey Token = b03f5f7f11d50a3a'因为它尚未预加载.使用ReflectionOnly API时,必须通过ReflectionOnlyAssemblyResolve事件按需预加载或加载相关的程序集.[C:\工作\ MyProject的\ MyProject.sln]
链接器似乎抱怨Microsoft.Windows.Design.Extensibility.dll,但该项目不依赖于此库.
我真的不得不using在C#中嵌套块.它不优雅,占用了大量空间.在某些情况下,它似乎是不可避免的,因为我需要声明不同数据类型的变量,但似乎可以简化单一类型的情况.我所说的"单一类型的情况"是指几个相同类型的变量是串联声明的.这是我正在谈论的一个例子:
class Program
{
static void Main(string[] args)
{
using (A a = new A("a"), b = new A("b"))
{
}
}
class A : IDisposable
{
string n = null;
public A(string name)
{
n = name;
Console.WriteLine(String.Format("Creating {0}", n));
}
public void Dispose()
{
Console.WriteLine(String.Format("Disposing {0}", n));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要它的工作方式a是之前构建的b,并且b之前处理a.不幸的是,C#规范中似乎没有任何关于它应该如何发生的方向.好像微软的C#编译器就像这样对待它,因为这是运行上述程序的输出:
Creating a
Creating b
Disposing b
Disposing a
Run Code Online (Sandbox Code Playgroud)
但是,我无法确保这是确定性行为.有人可以确认或反驳这个序列是确定性的吗?参考文献会很棒.显然,如果它容易破损(没有文件记录等),它可能没用,但这是一件好事.
已经有一个关于确定性处理的类似问题谈论多类型情况,我理解除了聪明的语法技巧之外没有真正的解决方案.无论如何,大多数答案都忽略了这一点.我的问题只是关于单一类型的情况以及这种处置是否具有确定性和可靠性.谢谢.
我正在尝试以.sav编程方式创建文件,而无需使用SPSS自动化(SPSS.BackendAPI库)以释放更多SPSS许可证.我发现CodePlex上的这个库使用32位I/O模块而不需要许可证,这很好.
问题是我需要将应用程序构建为x64,以便在我自己的应用程序中访问额外的可寻址内存.因此,我也需要使用64位库.有没有人在托管代码中使用64位库有好运?