第一种方法: string AppPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; if (AppPath.EndsWith("\\") || AppPath.EndsWith("/")) AppPath= AppPath.Substring(0, AppPath.Length – 1); 第二种方法:string AppPath = Environment.CurrentDirectory; // 结尾不带"/" 第三种方法:string AppPath = Directory.GetCurrentDirectory();//获取应用程序的当前工作目录 Directory.SetCurrentDirectory(localFolder);
View Details相信每个编程爱好者都希望自己的程序不仅性能优越而且有一个美观的界面,一个区别于别人的程序的个性化的界面。然而以前烦琐的API调用和大量的代码使大家望而却步。现在好了,在C#中通过少量的代码就可以实现不规则窗体的制作。如果您有兴趣就接着往下看吧。 一、在说我用的方法前,我不得不说一下另一种方法,这种方法在实现不规则窗体自身显示效果(即除开窗体的移动、最大最小话、关闭等)时是不用编代码 的。非常简便,但它的致命缺点就是要要求程序运行环境在24位色以下,否则不规则窗体的透明部分就会显示出来,窗体会非常难看。 方法1:步骤1:先用图象处理软件制作您的不规则窗体的位图BMP(最好是位图,其它的我没有试过:))。制作时请注意将背景色(即需要设置成透明的颜色部分)设置成与非背景图片颜色反差较大的颜色,并且使用一种容易记忆的颜色。如下图: 图中黄颜色背景将要设置成透明部分 步骤2:新建windows应用程序。创建windows窗体并设置窗体基本属性。(1)将 FormBorderStyle 属性设置为 None。(2)将窗体的 BackgroundImage 属性设置为先前创建的位图文件。不必将文件添加到项目系统中;这将在指定该文件作为背景图像时自动完成。(3)将 TransparencyKey 属性设置为位图文件的背景色,本例中为黄色。(此属性告诉应用程序窗体中的哪些部分需要设置为透明。 )上面两个步骤已经完成了不规则窗体自身显示效果的制作,此刻您要做的就是为窗体添加移动、关闭、最大最小化的事件。这个将在方法2中详细介绍。方法1在24位色以下的环境中可以显示正常,但在24位色以上时黄色背景不能消失,所以方法1不能胜任24位色以上环境。为了解决这个问题,我们可以用到方法2。方法2步骤1:同方法1,先用图象处理软件制作您的不规则窗体的位图BMP步骤2:创建windows应用程序。创建windows窗体。由于方法2是调用类来实现制作不规则窗体,所以您只需要在窗体的LOAD事件中加入以下代码:private void login_Load(object sender, System.EventArgs e){//初始化调用不规则窗体生成代码BitmapRegion BitmapRegion =new BitmapRegion();//此为生成不规则窗体和控件的类BitmapRegion.CreateControlRegion(this,new Bitmap("HMlogin.bmp")); }其中"HMlogin.bmp"为您制作的位图。 下面就是文件BitmapRegion.cs 我在网上找到的是英文的,自己翻译了一下,英语水平有限,有错的地方还请大家指出。 /***************************************************************************************///// 功能描述:不规则窗体和控件的生成类// 撰 写 人:不祥(网上搜集)// //// 修改说明:2005.8.31 杨丹翻译和修改///***************************************************************************************/using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; { /// <summary> /// Summary description for BitmapRegion. /// </summary> public class BitmapRegion { public BitmapRegion() {} /// <summary> /// Create and apply the region on the supplied control/// 创建支持位图区域的控件(目前有button和form)/// </summary> /// <param name="control">The Control object to apply the region to控件</param> /// <param […]
View Details前段时间公司进行有关测试的培训,集成测试,性能测试,压力测试说了很多。由于本人还处于Coder阶段,只是对单元测试有了些了解。写下来怕以后自己忘记了。都是些自己的看法,不一定准确,欢迎高手指教。 一、 单元测试的概念 单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。 测试的覆盖种类 1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。 2.判定覆盖(也叫分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。 3.条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次。 4.判定——条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次,并且每个可能的判断结果也至少执行一次。 5.条件组合测试:设计足够的测试用例,运行所测程序,使程序中每个判断的所有条件取值组合至少执行一次。 6.路径测试:设计足够的测试用例,运行所测程序,要覆盖程序中所有可能的路径。 用例的设计方案主要的有下面几种:条件测试,基本路径测试,循环测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖,和路径覆盖。 二、开始测试前的准备 在开始测试时,要先声明一下,无论你设计多少测试用例,无论你的测试方案多么完美,都不可能完全100%的发现所有BUG,我们所需要做的是用最少的资源,做最多测试检查,寻找一个平衡点保证程序的正确性。穷举测试是不可能的。 所以现在进行单元测试我选用的是现在一般用的比较多的基本路径测试法。 三、开始测试 基本路径测试法:设计出的测试用例要保证每一个基本独立路径至少要执行一次。 函数说明 :当i_flag=0;返回 i_count+100 当i_flag=1;返回 i_count *10 否则 返回 i_count *20 输入参数:int i_count , int i_flag 输出参数: int i_return; 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
int Test(int i_count, int i_flag) { int i_temp = 1; while (i_count>0) { if (0 == i_flag) { i_temp = i_count + 100; break; } else { if (1 == i_flag) { i_temp = i_temp * 10; } else { i_temp = i_temp * 20; } } i_count--; } return i_temp; } |
1.画出程序控制流程图 图例: 事例程序流程图: 圈中的数字代表的是语句的行号,也许有人问为什么选4,6,13,8……作为结点,第2行,第3行为什么不是结点,因为选择结点是有规律的。让我们看程序中;第2行,第3行是按顺序执行下来的。直到第4行才出现了循环操作。而2,3行没有什么判断,选择等分支操作,所以我们把2,3,4全部合并成一个结点。其他的也是照这个规则合并,然后就有了上面的流程图。 2.计算圈复杂度 有了图以后我们要知道到底我们有写多少个测试用例,才能满足基本路径测试。 这里有有了一个新概念——圈复杂度 圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保所有语句至少执行一次的测试数量的上界。 公式圈复杂度V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。 公式圈复杂度V(G)=P+1 ,P是流图G中判定结点的数量。 通俗的说圈负责度就是判断单元是不是复杂,是不是好测试的标准。一般来说如果圈复杂度如果大于20就表示这个单元的可测试性不好,太复杂(也许有人觉得无所谓,但是如果你们公司实行了CMMI5的话,对这个是有规定的)。 从图中我们可以看到, V(G)=10条边-8结点+2=4 V(G)=3个判定结点+1=4 上图的圈复杂图是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。 3.导出程序基本路径。 现在我们知道了起码要写4个测试用例,但是怎么设计这4个测试用例? 导出程序基本路径,根据程序基本路径设计测试用例子。 程序基本路径:基本独立路径就是从程序的开始结点到结束可以选择任何的路径遍历,但是每条路径至少应该包含一条已定义路径不曾用到的边。(看起来不好理解,让我们看例子)。 让我们看上面的流程图:从结点4到24有几条路径呢? 1 B(4,24) 2 C,E,J(4,6,8,24) 3 C,D,F,H,A,B(4,6,13,15,22,4,24) 4 C,D,G,I,A,B(4,6,13,19,22,4,24) 还有吗?? 5 C,D,C,I,A,C,E,J(4,6,13,19,22,4,6,8,24)算吗? 不算,为什么?因为上面的4条路径已经包括了所有的边。第5条路径已经不包含没有用过的边了。所有的路径都遍历过了。 好了,现在我们有了4条基本独立路径根据独立路径我们可以设计测试用例。 1 B(4,24) 输入数据:i_count=0,或者是i_count<0的某一个值。 预期结果:i_temp=0. 2 C,E,J(4,6,8,24) 输入数据: i_count =1;i_flag=0 预期结果:i_temp=101. 3 C,D,F,H,A,B(4,6,13,15,22,4,24) 输入数据: i_count =1;i_flag=1 预期结果:i_temp=10. 4 C,D,G,I,A,B(4,6,13,19,22,4,24) 输入数据: i_count =1;i_flag=2 预期结果:i_temp=20. 这里的输入数据是由路径和程序推论出来的。而要注意的是预期结果是从函数说明中导出,不能根据程序结构中导出。 为什么这么说? 让我们看程序中的第3行。 int i_temp=1;假如开发人员一不小心写错了,变成了int i_temp=0;根据程序导出的预期结果就会是一个错误的值,但是单元测试不出来问题。 那单元测试就失去了意义。 […]
View Details很多光盘上的程序,比如电脑迷光盘,开头总有一段动画,用来展现企业品牌和LOGO之用。这个动画是Flash做的,而且嵌入到程序中简直做到无缝融合,因为右键点击它也不会有那特有而烦人的Flash右键菜单。 因此将Flash融合到WinForm中能够增强程序的多媒体效果和炫丽的外观。现在我们就来看看在C#桌面程序中如何插入Flash视频,而且去掉烦人的右键菜单。 首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项…”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash8.ocx(也有可能是Flash9F.ocx,版本不同所致),然后点击确定就可以了。但到这里还没有完,因为要使用Flash控件必须注册它。 在CMD里面输入如下: regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash8.ocx 系统会提示注册成功,这个时侯就可以在VS2008里面使用该控件了! 打开VS2008,新建一个Windows程序,然后把刚才我们选择的Flash控件Shockwave Flash Object拖到窗体中,这时窗体中会出现一个白色的矩形框,Name属性我们设置为Myflash,在里面可以播放我们需要的swf文件。 注意到该控件主要有几个属性: Name属性,这个是所有对象都会有的。 Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简的菜单(设置与关于)。 Move属性,这个属性是用来指定要播放的Flash文件的。 Playing属性,指定是否装在影片之后马上播放。 Quality属性,设置影片的质量。 Scalemode属性,设置影片的缩放模式。 Visible属性,设置影片控件的可视与否。 接下来我们在窗体中放置一个按钮,Text属性设置为LoadSwf。双击添加事件代码如下: OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Flash文件|*.swf"; DialogResult dr = ofd.ShowDialog(); if (dr == DialogResult.OK) { Myflash.Movie = ofd.FileName; Myflash.Play(); } 这样当程序运行的时候点击按钮会要我们选择一个SWF文件,选择好后确定就自动播放了! 当然,我们还可以添加一些按钮,分别为Play,Pause Play按钮的播放功能如下: This.Myflash.Play(); Pause按钮的暂停功能如下: This.Myflash.StopPlay();
View DetailsOracle数据库在开始菜单中使用自带的程序卸载后,我们经常为了避免下次再次安装过程中这样那样的错误发生,我们要对Oracle进行下完全的卸载,下面是手工处理删除不掉的一些文件夹和目录。 常用Oracle数据库的同仁都知道,Oracle经常会莫名的出现一些错误,导致数据库无法正常启动或使用。 经过对出现这些问题的解决,后来找到了问题的根源,也就是再次安装Oracle数据库时,未对之前安装的Oracle进行彻底的卸载所导致。下面我就详细谈谈如何才能彻底卸载Oracle数据库 一、Linux 平台 Linux 平台下卸载Oracle 非常简单,即:删除Oracle安装目录下的所有文件和文件夹即可。 二、Windows 平台 其实这篇文章我主要想就在Windows平台上如何彻底的卸载Oracle进行说明。 因为Oracle在Windows下的卸载颇有一些麻烦,如果不能完全卸载有可能影响将来的再次安装!常规卸载方法是运行Oracle的自带的 卸载程序,可遗憾的是我在卸载时总不能完全卸载,当我再次安装Oracle时,就会出现莫名其妙的问题,并且这种卸载方式比较麻烦,比较慢,下面我介绍一 种比较快并且能够彻底卸载Oracle的方法。 1.关闭oracle所有的服务。可以在windows的服务管理器中关闭; 2.打开注册表:regedit 打开路径: 这一步中,可以用到我们在注册表清理软件一文中介绍的一款及其方便查找路径的小软件。Registry Manager HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务! 3.打开注册表,找到路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息。 4.删除注册的oracle事件日志,打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application 删除注册表的以oracle开头的所有项目。 5.删除环境变量path中关于oracle的内容。 鼠标右键右单击“我的电脑-->属性-->高级-->环境变量-->PATH 变量。 删除Oracle在该值中的内容。注意:path中记录着一堆操作系统的目录,在windows中各个目录之间使用分号(;)隔开的,删除时注意。 建议:删除PATH环境变量中关于Oracle的值时,将该值全部拷贝到文本编辑器中,找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到PATH环境变量中,这样相对而言比较安全。 6.重新启动操作系统。 以上1~5个步骤操作完毕后,重新启动操作系统。 7.重启操作系统后各种Oracle相关的进程都不会加载了。这时删除Oracle_Home下的所有数据。(Oracle_Home指Oracle程序的安装目录) 8.删除C:\Program Files下oracle目录。 (该目录视Oracle安装所在路径而定) 9.删除开始菜单下oracle项,如: C:\Documents and Settings\All Users\「开始」菜单\程序\Oracle – ora10g 不同的安装这个目录稍有不同。 如果不删除开始菜单下的Oracle相关菜单目录,没关系,这个不影响再次安装Oracle.当再次安装Oracle时,该菜单会被替换。 至此,Windows平台下Oracle就彻底卸载了。 到这里,我们的任务就完成了, 如果哪位人才有感兴趣的同仁可以自己编写一个小工具,用来彻底删除Oracle.提供上来大家一起用用,我想很多人会感激涕零的。 FROM:http://www.tree360.cn/blog/article.asp?id=123
View Details