随风飘扬

喜欢清茶,喜欢静静的生活。技术的道路上没有尽头,生活的道路上留下足迹
数据加载中……

2008年8月12日

Visual Studio 2008 SP1导致 SOS和VSS工作不正常

早上辛苦安上了VS2008的SP1,安装完傻眼了,SOurceOff Site无法启动了,启动服务的时候会报出 “System.TypeInitializationException” 的异常,无法启动。而VSS据很多人反应也是工作不正常的,我Orz啊。

 

现在只好立马另外拿来一台服务器当源代码管理器了,不知道各位安装了SP1的伙计们有没发现这样类似的问题?

 

@2008年8月12日14:54:33

确认是Framework 3.5 SP1 的问题,因为源代码服务器上装了这个后源代码管理就死掉了。。

posted @ 2008-08-12 13:37 木鱼 阅读(177) | 评论 (3)编辑

2008年4月17日

替文件夹加上“从此处开始运行测试服务器”的菜单

     摘要: VS2005/2008(.NET 2.0) 本身自带了一个 WebDevServer,所以开发调试简单了很多,至少不需要去折腾IIS了。平时从网上下载很多Demo的时候需要一个测试服务器,就可以用它来完成,也比用IIS省事许多。这个测试服务器位于 %systemroot%\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE,是命令行操作的... 阅读全文

posted @ 2008-04-17 12:57 木鱼 阅读(118) | 评论 (3)编辑

2008年3月24日

DevExpress窗体风格应用以及MDI子窗体风格的应用

开始上手DevExpress控件开发。

 但是个人感觉这套控件虽然相当豪华,但是很难上手,资料少不说,其属性设置什么的与通常的属性差别太大,应用起来太难。相比dotNetBar要好很多,比如改造现有窗体只需要改变按钮类型以及窗体父类就可以了,但是对于DevExpress这简直是天方夜谭。研究整整两天到现在才有关于窗体皮肤的那么一点头绪,真郁闷。

在DevExpress中有些内建的风格了,要加载额外的风格,需要使用 DevExpress.Skins.SkinManager.Default.RegisterAssembly 这个方法,下面是示例代码:

            DevExpress.Skins.SkinManager.Default.RegisterAssembly(System.Reflection.Assembly.Load("DevExpress.BonusSkins.v7.3"));
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(System.Reflection.Assembly.Load(
"Office2007Bonus"));
            
//DevExpress.Skins.SkinManager.Default.RegisterAssembly(System.Reflection.Assembly.Load("DevExpress.XmasSkins"));
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(System.Reflection.Assembly.Load("DevExpress.OfficeSkins.v7.3"));
上面那行注释掉的是因为运行会出错,个人估计是因为破解的缘故,呃。这样加载的结果,大概是有17个风格出现。

在风格加载过后,通过 DevExpress.Skins.SkinManager.Default.Skins 可以获得所有皮肤的列表。

在应用控件后,窗体要应用DevExpress的风格,可以让窗体不从 System.Windows.Forms.Form 继承而从 DevExpress.XtraEditors.XtraForm 继承,这样窗体就可以使用DevExpress 的风格颜色配置了。但是这样使用后还会有问题,就是窗体的边框不会被DevExpress的风格应用上。
要解决这个问题,可以使用 DevExpress.Skins.SkinManager.EnableFormSkins() 这个方法,在应用后,窗体边框也会被应用上风格。这个方法建议在创建窗体前就调用,比如在 Program.cs 的Main方法中,在 Application.Run 调用前就使用,这样能避免很多问题。

到此基本上达到目的了,但是呢,人类的欲望是无穷的啊。现在就会发现有点不爽的地方了,是什么呢?就是当一个窗体是MDI窗体(MDIParent不为空)的时候,这个窗体是无论如何也无法被应用的。郁闷不?那当然郁闷,何止是郁闷,那不是一般的郁闷啊。可怜DevExpress的开发文档少得就如同我兜里的钞票一样,在它的Demo之内也没有找到示例。
基本上花了三个小时折腾到现在就是为了折腾这个。唉。

不过终于找到方法了,还是从开发文档中找到的,那就是 evExpress.Skins.SkinManager.EnableMdiFormSkins() 这个方法。望文生义,看这个方法的名字就知道这个函数是干嘛了吧??
但是很让我感觉不对劲的是,为什么在VS里面找不到这个方法。在SDK中对这个方法的解释是,“This member supports the internal infrastructure and is not intended to be used directly from your code”。我英语不太好,但是我看懂了它是在说不建议直接从代码中调用,也不知道是为什么。祭出伟大的 Reflector 反编译一下 DevExpress.Utils.v7.3.dll ,看到这样的代码:
1[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
2public static void EnableMdiFormSkins()
3{
4    allowMdiFormSkins = true;
5}
原来如此,根据方法属性不让浏览到,不明白DevExpress这样处心积虑去隐藏是为什么,难道见不得人吗

琢磨着可能有其它的方法能间接调用,但是折腾这么久死了N+脑细胞也没能找到是因为什么啊,忧郁
算了,最后就直接调用了,编译正常,运行也正常。想不通,但就这么着吧。最后Program.cs中的代码如下:
[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    DevExpress.UserSkins.OfficeSkins.Register();
    DevExpress.Skins.SkinManager.EnableFormSkins();
    DevExpress.Skins.SkinManager.EnableMdiFormSkins();
    Application.SetCompatibleTextRenderingDefault(
false);
    Application.Run(
new MainForm());
}



任务达成,撤退!

posted @ 2008-03-24 00:25 木鱼 阅读(407) | 评论 (2)编辑

2008年3月8日

.NET中的 Image.FromFile 方法会锁住文件的解决方法

在 CNBLOGS 注册了这么久,一直就是一个默默无闻的观看者.
今天终于来发了第一贴.

就..就..就发新手区里面! -____________-#
-------------------------------------------------------------------


.NET中的 Image.FromFile  一旦使用后,对应的文件在一直调用 其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作).

在以前用的过程中曾用过下面三个方法解决问题.

 

第一种方法,在要进行文件操作前将Image对象销毁.
PictureBox picbox;
if(picbox.Image!=null)picbox.Image.Disponse();

第二种方法,就是在加载图像的时候用一种方法替代:

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
System.Drawing.Image bmp = new System.Drawing.Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp);
g.DrawImage(img, 0, 0);
g.Flush();
g.Dispose();
img.Dispose();

//下面开始使用bmp作为显示的Image对象

一直以来用的是上面的第二种方法.今天实验出来突然有种方法更加简单:

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
System.Drawing.Image bmp = new System.Drawing.Bitmap(img);
img.Dispose();
//下面开始使用bmp作为显示的Image对象

呃.就这样了.

posted @ 2008-03-08 21:10 木鱼 阅读(81) | 评论 (0)编辑