我有一个WinForms应用程序,我想在用户单击窗口左上角(图标)或按ALT + SPACE时打开的菜单中添加一个菜单项.
表单只显示MainMenu和ContextMenu,但没有图标菜单或类似的东西.有没有一种简单的方法可以在WinForms应用程序上修改它?
我正在谈论这个菜单,我想添加一个简单的"关于"条目,只是为了让人们检查应用程序中的版本和URL.通常的用户界面中没有好的地方(没有主菜单).
Alt + Space菜单http://img513.imageshack.us/img513/3162/altspacemenu.jpg
我想使用反射根据文件中的数据设置一些字段.我可以拥有的信息是TypeName,TypeValue和FieldName.
虽然这对类(Activator.CreateInstance和PropertyInfo.SetValue)来说是微不足道的,但是对于像Int32这样没有任何属性的值类型,我有点愚蠢.我看到IsValueType在那些类型上是真的,但由于我的TypeValue是一个字符串(即字符串TypeValue ="400"),我不知道如何分配它.
我是否必须GetMethods()用来检查是否有.Parse方法?这是为了TypeConverter什么?
我知道我可以硬编码一些常见的值类型(反正没有那么多)并且有一个很大的switch()语句,但是我想知道是否有一些东西可以自动执行"Convert String to T"转换?
我有一些JPG图像.其中一些可能在一侧或多侧有黑色边框,我想将它们删除.黑色边框可能不会围绕实际图像 - 有些可能只有底部的边框(实际图像位于顶部),而有些可能居中(这意味着两边是黑色边框,但没有连接).更糟糕的是,图像是JPG Compressed,所以它们可能不再是0,0,0 black.
在一个Paint程序中,我会"简单地"使用具有低容忍度的Magic Wand工具,但我需要在ASP.net上的C#中进行,我不知道最好的方法是什么.
我应该"扫描"每一行然后每列(两个嵌套的for循环)来查找黑色区域吗?听起来有些愚蠢,性能和CPU负载方面.或者GDI +已经有一些魔棒工具?
图像不是那么大(最大474x474像素)并在之后缓存,但我需要尽可能降低服务器负载.
有什么暗示最不愚蠢的做法是什么?
我有一个WinForms应用程序,我希望在某些时候在Mono上运行.但是,它正在对user32.dll使用一些P/Invoke,这将导致明显的问题.
然而,这不是一个关键的功能,只是一些风味的东西.所以我想在运行Mono时忽略它.
我知道我可以使用#if指令,但是我必须提供两个不同的程序集,这很糟糕.我知道如果我在Mono中运行,我可以检查运行时,但这不会帮助我删除函数的声明.
所以我想知道:有没有办法可以说"如果运行Mono,完全忽略它"?如果它有帮助:P/Invoke的东西在一个单独的.cs文件中并作为Partial Class实现.
有问题的源代码在这里:http://pastie.org/588940
它是我的主窗体的一部分,覆盖WndProc消息以将项添加到系统菜单.(其他一些东西被剪掉).我的问题是虽然WndProc的东西很简单,但我不知道如何处理这两个私有的extern声明 - 我可以把它们放到另一个(静态)类中,我从不在Mono上调用它吗?或者那是俄罗斯轮盘赌?
好的,新手多线程问题:
我有一个Singleton类.该类有一个静态列表,基本上这样工作:
class MyClass {
private static MyClass _instance;
private static List<string> _list;
private static bool IsRecording;
public static void StartRecording() {
_list = new List<string>();
IsRecording = true;
}
public static IEnumerable<string> StopRecording() {
IsRecording = false;
return new List<string>(_list).AsReadOnly();
}
public MyClass GetInstance(){
}
public void DoSomething(){
if(IsRecording) _list.Add("Something");
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,用户可以调用StartRecording()来初始化List,然后对instance-method的所有调用都可以向列表添加内容.但是,多个线程可能会将实例保存到MyClass,因此多个线程可能会向列表中添加条目.
但是,列表创建和读取都是单个操作,因此多线程情况下通常的读写器问题不适用.我能看到的唯一问题是插入顺序很奇怪,但这不是问题.
我可以按原样保留代码,还是需要采取任何预防措施来进行多线程处理?我应该在实际应用程序中添加它不是字符串列表而是自定义对象列表(所以代码是_list.Add(新对象(somedata))),但这些对象只保存数据,除了调用之外没有代码到DateTime.Now.
编辑:澄清以下答案:DoSomething不能是静态的(这里的类是缩写的,有很多东西正在使用实例变量,但这些由构造函数创建,然后才读取).这样做是否足够好
lock(_list){
_list.Add(something);
}
and
lock(_list){
return new List<string>(_list).AsReadOnly();
}
Run Code Online (Sandbox Code Playgroud)
还是我需要一些更深层次的魔法?
有点学术问题,但是:像Int这样的价值类型实际上是如何运作的?
我在mscorlib上使用了Reflector来了解System.Int32是如何实现的,它只是一个继承自System.ValueType的Struct.我正在寻找包含该值的数组的行中的某些东西,但我只发现了一个声明为int的字段 - 这意味着它是一个循环引用?
我的意思是,我可以写"int i = 14;",但是数字14需要以某种方式存储在某处,但我找不到"32位数组"或指针或其他东西.
这是编译器所做的一些魔术吗?这些魔术类型是规范的一部分吗?(类似于System.Attribute或System.Exception是"特殊"类型)
编辑:如果我声明自己的结构,我添加字段.这些字段是内置类型,例如int.所以CLR知道我持有一个int.但它如何知道int是32位,签名?仅仅是规范指定了某些基本类型并因此使它们"神奇",还是有技术机制?假设示例:如果我想要声明一个Int36,即36位的整数,我可以通过指定"好的,预留36位"来创建一个与Int32 完全相同的类型(除了4个额外的位) ,或者是内置的原语,我必须以某种方式解决这个问题(即使用Int64和仅设置最后36位的代码)?
如上所述,所有非常学术和假设,但我总是对此表示疑惑.
我对SharePoint 2007的一个抱怨是复杂的SPWeb.Dispose规则,如果你不处理你所拥有的东西,它们可能导致大量资源泄漏,或者如果你不需要处理时会导致各种其他奇怪的问题.Roger Lamb的发帖试图总结疯狂.但我想知道SharePoint 2010是否能改善这一点?
我有Beta设置,但这里看不到太大的区别,但有些东西至少有所改进吗?
在ASP.net MVC 2中,我可以使用routes.RouteExistingFiles = true;通过路由系统发送所有请求,即使它们存在于文件系统上.
通常,这最终会击中"{controller}/{action}/{id}"路径并引发异常,因为无法找到控制器.
我不想使用那条路线(我只有几个URL并且它们是专门映射的),但我仍然希望阻止访问文件系统.
基本上我想使用IgnoreRoute白名单页面.有没有内置的方法来做到这一点?
我目前的方法是仍然有一条路线"{*anything}" 并在命中时生成404,但我只是想知道某些东西是否已内置?
我有两个.config文件,我需要一个System.Configuration.Configuration,它们之间是部分合并?
我可以将文件作为XML读取并轻松创建所需的合并,但它是一个字符串或XDocument.但是,.net的System.Configuration似乎是严格基于文件的,所以我必须将它写入我想避免的临时目录.
有没有办法做到这一点?
示例config1.config:
<configuration>
<appSettings>
<add key="CacheTime" value="300" />
</appSettings>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="MyBehavior">
<!-- snipped -->
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
并且config2.config:
<configuration>
<system.serviceModel>
<client>
<endpoint name="MyEndpoint" address="net.tcp://...."
behaviorConfiguration="MyBehavior" binding="netTcpBinding"
contract="IMyContract">
</endpoint>
</client>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
结果配置应该是这两者的联合,这样我就有了AppSetting和Endpoint.现在,这个例子包含WCF,但我不是在寻找一个特定于WCF的解决方案,因为我绝对需要一个System.Configuration.Configuration对象.
config1和config2只是示例 - 它们的实际组合是非确定性的,我可能有config1和config4或config 3和config4或config2和config3.
我正在写一个俄罗斯方块克隆,我在C#中进行原型设计.最终的代码应该在嵌入式系统上运行(使用8位CPU和非常小的RAM),所以我试图使用天真的算法来清除行.
现在,我的playfield是一个2D数组:
private readonly TetrominoType[][] _playfield;
Run Code Online (Sandbox Code Playgroud)
(其中TetrominoType是一个枚举,表示无或7种类型中的一种,用于着色块)
当一行被清除时,我想要就地修改这个数组,这就是我的问题所在.举个例子:
Before After
0 # # # #
1 # # # #
2 # # # #
3 # # # #
4 # # # #
5 #xxxxxx# # #
6 #x xx# # #
7 #xxxxxx# # #
8 #xxxxxx# #x xx#
9 #x xxxx# #x xxxx#
######## ########
Run Code Online (Sandbox Code Playgroud)
我已经确定需要删除第5,7和8行,因此其他行应该掉下来,让我处于右边的状态.
我天真的方法是向后迭代并将行复制到已清除的行上方,基本上:
for(int iy = 9; iy >= 0; iy--) {
if(_linesToClear.Contains(iy)) {
for(int ix = 0; ix < …Run Code Online (Sandbox Code Playgroud) .net ×9
c# ×5
asp.net ×2
algorithm ×1
app-config ×1
arrays ×1
asp.net-mvc ×1
gdi+ ×1
graphics ×1
mono ×1
pinvoke ×1
reflection ×1
sharepoint ×1
tetris ×1
web-config ×1
winforms ×1