2010年12月31日

VS2008 在进行ASP.NET 开发时 如何避免加载设计页面时假死及减少保存所耗的时间。

这段时间有个ASP.NET的项目在弄,在对前台页面进行设计时,发现加载设计界面很慢,这都还可以理解,但是不能理解的是

在我修改了某一属性的值后进行保存时,发现所需的时间会更长,我想这样岂不是非常吃力,我到网上找了一些答案。都没有

解决我的问题(要么就是说机器配置低、软件有冲突等)我按照上面的方法改了但是发现还不能解决问题,在家里时发现家里

的机器运行的很快,保存也很快。我就纳闷了,怎么会这样呢,原来是我当时想学习Sliverlight时安装了VS2008 sp1安装补丁

果然在公司的电脑上安装上VS 2008 sp1后一切运行正常。

我安装的SP1 补丁为

VS2008更新包SP1CHSX1512981.iso

 

在Microsfot 官网上有。

 

顺便给出个我使用个的VS2008 系列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

posted @ 2010-12-31 09:40 WTPMCheng 阅读(264) 评论(0) 编辑

2010年10月10日

ASP.NET学习笔记一:Application,Server,Session对象

     这段时间利用工作之余想系统的再次去学习ASP.NET。刚好学习到了ASP.NET的三个对象Application,Server,Session觉得比较有用,先作为笔记记录下,方便以后查用,顺便也可以加深印象。因为理解时因人而异,文章中对对象具体的解释清参考MSDN官方文档。

     一、Application对象

          个人理解:应用程序及对象,当我们程序运行时Application就产生了。Application以键值对存储数据,可以将Application对象理解成对象的集合      

          所属的类:HttpApplicationState 启用

          MSDN官方:ASP.NET 应用程序中多个会话和请求之间的全局信息共享

          ASP.NET 应用程序是单个 Web 服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。

HttpApplicationState 类的单个实例在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建。对于 Web 服务器上的每个 ASP.NET 应用程序都要创建一个单独的实例。然后通过内部 Application 对象公开对每个实例的引用。

应用程序状态不在网络场(应用程序被多台服务器承载)或网络园(应用程序被同一台计算机上的多个进程承载)中共享。

         如何使用:如果要使用Application,先可以添加一个ASAX文件,它的作用是初始化应用程序级或会话级变量。VS2008中可以直接添加ASAX文件,而在VS2003中在你新建ASP.NETweb 应用程序时时已经为你创建好了。在VS20003的Global.asax中是以类的形式存在,而在VS2008中的Global.asax是以脚本文件形式存在(个人理解)。新建好之后,我们会看到Global文件中有以下事件:

          1、void Application_Start(object sender, EventArgs e)
               {
                          //在应用程序启动时运行的代码

               }

          2、void Application_End(object sender, EventArgs e)
               {
                         //在应用程序关闭时运行的代码

               }

          3、void Application_Error(object sender, EventArgs e)
               {
                         //在出现未处理的错误时运行的代码

               }

          4、void Session_Start(object sender, EventArgs e)
               {
                          //在新会话启动时运行的代码

               }

         5、void Session_End(object sender, EventArgs e)
               {
                         //在会话结束时运行的代码。
                        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
                        // InProc 时,才会引发 Session_End 事件。如果会话模式
                       //设置为 StateServer 或 SQLServer,则不会引发该事件。

               }

     二、Session对象

           个人理解:存储用户信息。会话:客户端(浏览器)想服务器端发送请求,服务器端响应后返回给客户端,这样的一个过程可以理解为一个Session(会话)

           所属的类:HttpSessionState

           MSDN官方:提供对会话状态值以及会话级别设置和生存期管理方法的访问。详细请参考MSDN关于 ASP.NET 会话状态

           常用属性:SessionID(唯一用户会话标识符) TimeOut(用户超时) LCID(本地标识符) Count(会话状态中的项目数)

           常用事件:void Session_Start(object sender, EventArgs e)和void Session_End(object sender, EventArgs e)

    三、Server对象

          个人理解:获取你所请求服务器的相关信息

          所属类:HttpServerUtility

          MSDN官方:提供用于处理 Web 请求的 Helper 方法。

          常用属性:ScrtiptTimeOut MachineName

          常用方法:Execute Transfer HTMLEncode,URLEncode,MapPath

          Execute:在服务器端去执行另一个页面,执行完成后,将结果返回到当前页面

          Transfer:类似于Response.Redirect()

          HTMLEncode:以纯文本形式输出HTML标记

          URLEncode:处理在通过URL传递参数时包含的特殊字符

          &变量分隔符

 

知识点:

    1、application对象是应用程序级的,是所有用户共享的,而session是用户级的,其他用户不能访问其他用户的session

    2、apolication和session都是键值对的集合对象

    3、会话断开或销毁超时时间一般为20分钟,可以在session_start事件中设置timeout的值,最小为1(1分钟)。还需要注意不是你把浏览器关闭就说明会话断开或销毁,而是你session的TimeOut超时或关闭World Wide Web Publishing服务,还可以是你机器正常关机。

 

综合实例:统计历史访问人数、在线人数、登陆系统及Server对象的使用

          示例

posted @ 2010-10-10 15:32 WTPMCheng 阅读(298) 评论(0) 编辑

2010年9月1日

操作系统设置不当也会出现“该字符串未被识别有效的DateTime”的错误

前提简介:

    之前公司客户向我反映了一个问题,说为什么我第一使用你们的软件,怎么连工程都建不了(我们做的是一个建筑施工项目),这点事我们BOSS跟说我要我解决下,这下子我哪敢怠慢,连忙去联系客户看他出现了什么错误,他截了一张图给我看:

如下图:

我看了下代码索引8处是需要一个日期类型的数据,我就到我的机器上测试,不管怎么测试都没有这个错误,我就想,这还奇了怪了,难道是他操作系统有问题(但是最后确认是我猜对了)。

 

问题:

本来我使用DateTimePicker控件时,设置的只显示年月日,可是客户传给我的图片中连星期也显示了。

寻求问题解决方案:

1、首先呢,我就到网上去搜索该问题的解决方案,但是都不是我想要的;

2、我就在一个群里面贴了张图上去,果然高手来了,说XP系统时间设置的问题,按照他的方式果然问题在我的机器上出现了;

既然知道了问题,就解决问题。

重现客户问题:

(让DateTimePicker格式显示为年月日星期X)

步骤:开始->控制面板->区域和语言选项->点击自定义按钮->进入日期选项卡,设置如下图:

在长日期格式最后加入dddd,变成yyyy'年'M'月'd'日'dddd这样设置运行后,你就会发现DateTimePicker的格式会显示2010年9月1日星期三

 

解决方案:

第一种方法:

按照上述重现问题的方法,将长日期格式最后的dddd去掉,问题随之解决(也是这么帮客户解决的);

第二种方法:

采用编码的方式,截取获取的日期格式字符串。即使出现了年月日星期格式也不会出现问题了

例如:

string needStartDate = "";

string testFinishDate = this.dtmFinishDate.Text.Trim();

if (testStartDate.Contains("星期"))
{

         string[] sArray = Regex.Split(testStartDate, "星", RegexOptions.IgnoreCase);
                        if (sArray.Length > 0)
                        {

                            //所需的日期格式
                            needStartDate = sArray[0].ToString();

                         }

}

 

个人总结,希望可以帮助到人。

posted @ 2010-09-01 22:04 WTPMCheng 阅读(820) 评论(3) 编辑

2010年8月16日

Dockpanel 使用技巧

DockPanel的基本使用 我就不说了,网上很多,我想说的是在使用DockPanel时 需要注意的几个小问题

第一个:

使用过DockPanel的人,都有可能会遇到这样一个错误:

Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content.

翻译过来的意思大致是:无效的内容: 如果没有一个可见的内容,ActiveContent必须是可见的内容或空。

具体是什么原因,大家可以相互探讨下。下面我说说出现这个问题的几种情况

 代码中的this关键字代表的就是Dockpanel所在的窗体为Form1

1)、当Dockpanel的DocumentStyle不为DockingMdi时,以下代码会出现这个问题      

       Frm_A frmA = null;
       //判断子窗体中是否已经存在在DockPanel中
       foreach (DockContent frm in this.dockPanel1.Contents)
        {
             if (frm is Frm_A)
              {
                    frm.Activate();     //激活子窗体
                    return;
              }
            }

 

            frmA = new Frm_A();
            frmA.MdiParent = this;
            frmA.Show(this.dockPanel1);

        解决方案:看你设置Dockpanel的DocumnetStyle是否为DockingMdi。大家也可以试试其他几种方式(DockingWindow,DockingSdi,SystemMdi)

2)、设置了Dockpanel的DocumentStyle不为DockingMdi时,如果你想要设置窗体Frm_B为左边浮动窗体,需要设置窗体Frm_B的DockAreas为且仅为DockLeft,如果想要实现其他功能可自行去设置其他属性信息,现在请看下面代码

            Frm_B frmB = null;
            //判断子窗体中是否已经存在在DockPanel中
            foreach (DockContent frm in this.dockPanel1.Contents)
            {
                if (frm is Frm_B)
                {
                    frm.Activate();     //激活子窗体
                    return;
                }
            }

            frmB = new Frm_B();
            //frmB.MdiParent = this;
            frmB.Show(this.dockPanel1,DockState.DockLeft);

            注意,如果你在你的代码中加了红色注释的代码,那么程序运行时 也会报上面的那个错

            解决方案:注释红色的代码。

            原因:(个人理解)frmB.Show(this.dockPanel1,DockState.DockLeft);这句代码其实就设置了frmB只停靠在DockPanel左边,此时的frmB是不属于MDI子窗体的,所以一旦你加入红色的代码,程序就会报错。

 

第二个:

拖动、停靠、固定子窗体(显示在Dockpanel中)

拖动:如果你想使你的子窗体可以任意拖动,那么你在设置子窗体的DockAreas属性时,保持默认值,不要修改。

停靠:首先你需设置DockAreas的位置,可以停靠在左、右、下等,也可以通过程序代码控制,参考上面代码。

固定:只需设置你窗体的DockAreas为Document就行了

 

第三个:

子窗体和Contents的判断

很多时候你需要判断Dockpanel中存在多少个子窗体或Contents,请参考下面代码:

foreach(Form in this.MdiChildren)

{

      //这样判断时,停靠的窗体是不会计算在内的

}

 

foreach (DockContent frm in this.dockPanel1.Contents)
 {

     //这样设置后,所有的继承与DockContent的窗体都会被计算在内的

}

 

第四个:

寻找主窗体、动态显示子窗体

参考图:

实现的功能:这里我们需要实现,右键点击A窗体,通过右键菜单来显示窗体B。

  //主窗体的对象
  Form1 form1;

private void showB_Click(object senders, EventArgs e)
 {

           GetFrmMain();  //通过此函数来获取form1     

           foreach (Form frm in form1.MdiChildren)
            {
                if (frm is Frm_B)
                {
                    frm.Activate();
                    return;
                }
            }

            Frm_B frmB = new Frm_B(this);
            frmB.MdiParent = form1;
            frmB.Show(form1.dockPanel1);

}

 

private void GetFrmMain()

{

              if (this.Parent.Parent.Parent.Parent != null)
                {
                    form1 = (Form1)this.Parent.Parent.Parent.Parent;
                }
                else
                {
                    form1 = (Form1)this.Parent.Parent.Parent;
                }

}

 

现在是在A窗体中,this关键字已经代码的不是主窗体了,那么这里我们就需要获取主窗体对象

当A窗体停靠时,需要this.Parent.Parent.Parent.Parent(四个)

不停靠时,只需要三个this.Parent.Parent.Parent

调试代码发现:停靠时

this.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPane}

this.Parent.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockWindow, BorderStyle: System.Windows.Forms.BorderStyle.None}

this.Parent.Parent.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPanel, BorderStyle: System.Windows.Forms.BorderStyle.None}

this.Parent.Parent.Parent 为 {TestEvenhandler.Form1, Text: Form1} 就是我们要找的主窗体Form1

 

不停靠时:

this.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPane}

this.Parent.Parent 为 {WeifenLuo.WinFormsUI.Docking.DockPanel+AutoHideWindowControl, BorderStyle: System.Windows.Forms.BorderStyle.None}

this.Parent.Parent.Parent 为 {TestEvenhandler.Form1, Text: Form1} 就是我们要找的主窗体Form1

 

四个小问题,也算不上技巧,是我在开发中遇到过的,里面的缘由可能解释不是很清楚,忘大家相互探讨,共同进步。

 

待续。

posted @ 2010-08-16 22:41 WTPMCheng 阅读(2968) 评论(2) 编辑

2010年8月2日

Java 桌面应用程序开发学习笔记二

学习Java桌面应用程序开发_主窗体

一般的应用程序都是登陆窗体,登陆成功后进入主界面的,先看看主界面的草图:

从图中可以看出,主界面大致可以分为四块,上面是菜单栏及图片工具栏,左边是树形导航,下边的状态栏。

菜单栏:JMenuBar(菜单条),JMenu(菜单),JMenuItem (菜单项)

工具条:toolbar,JButton(按钮+图片)

树形导航:JTree

状态栏:toolbar,JLable

 

实现界面的代码:

菜单栏:

 

代码
1 final JMenuBar menuBar = new JMenuBar();
2 menuBar.setName("menuBar");
3 setJMenuBar(menuBar);
4
5 final JMenu jmenuFile = new JMenu();
6 jmenuFile.setText("文件(F)");
7 jmenuFile.setName("menuFile");
8 menuBar.add(jmenuFile);
9
10 final JMenuItem newProject = new JMenuItem();
11 newProject.setName("newProject");
12 newProject.setText("新建工程");
13 jmenuFile.add(newProject);
14
15 final JMenu jmenuTool = new JMenu();
16 jmenuTool.setText("工具(T)");
17 jmenuTool.setName("jmenuTool");
18 menuBar.add(jmenuTool);

 

 

工具栏:

 

代码
final JToolBar toolBar = new JToolBar();
toolBar.setName(
"toolBar");
getContentPane().add(toolBar, BorderLayout.NORTH);

final JButton jbtnNew = new JButton();
jbtnNew.addActionListener(
new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
//点击新建按钮触发事件
}
});
jbtnNew.setName(
"jbtnNew");
jbtnNew.setIcon(SwingResourceManager.getIcon(Main.
class,
"Image/FileNew.png"));
jbtnNew.setText(
"新建");
toolBar.add(jbtnNew);

toolBar.addSeparator();

final JButton jbtnSave = new JButton();
jbtnSave.addActionListener(
new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
}
});
jbtnSave.setName(
"jbtnSave");
jbtnSave.setIcon(SwingResourceManager.getIcon(Main.
class, "Image/FileSave.png"));
jbtnSave.setText(
"保存");
toolBar.add(jbtnSave);

 

 

树形菜单:

 

//根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("任务信息");
//创建树
JTree tree = new JTree(root);

 

 

状态栏:

 

代码
1 final JToolBar stautsBar = new JToolBar();
2 stautsBar.setName("statusBar");
3 getContentPane().add(stautsBar, BorderLayout.SOUTH);
4
5 lblWelcome = new JLabel();
6 lblWelcome.setText("欢迎");
7 stautsBar.add(lblWelcome);
8
9 stautsBar.addSeparator();
10
11 lblSupport = new JLabel();
12 lblSupport.setText("技术支持:");
13 stautsBar.add(lblSupport);

 

 

利用上述代码 就可以搭出主界面的框架来,可能还需要朋友们自己去扩展。。

 

注意:

1、要注意界面的布局,可以添加jpanel容器参与布局。

 

2、现在看到的草图控件是比较少的,如果控件多了,处理的事件多了,那么就为了防止主界面代码过多,就需要我们学会使用分拆分,再组合的方式。

例如:树形控件或处理事件的代码 成一个类(test1)

         面板1控件或处理事件的代码一个类(test2)

         。。。。。。

 

         主界面中时 组合在一起 效果是一样的 但是主界面的代码将大大减少。。

 

3、在新建一个jframe后,一定要为界面编写释放资源的代码,如果你不编写dispose(); 运行一次 就会在进程中添加一个javaw进程(可以自己测试)

    public void windowClosing(final WindowEvent e) {
                dispose();
    }

 

posted @ 2010-08-02 12:56 WTPMCheng 阅读(742) 评论(1) 编辑

2010年7月27日

WindowBuilder.Pro.v6.1.1 破解步骤

摘要: 当你在使用WindowBuilder.Pro.v6.1.1 作为开发Java swing程序的插件时,你必然会遇到一个问题,就是需要注册。下面的步骤教你进行破解。  第一步:  开始>运行>cmd>输入ipconfig /all,在DOS窗口中你会看到有个Physical Address:**-**-**-**-**-** 第二步:  WindowBuilder 注册机 Keyg...阅读全文

posted @ 2010-07-27 21:07 WTPMCheng 阅读(203) 评论(0) 编辑

2010年6月20日

服务器应用程序不可用 “”应用程序中的服务器错误 IIS

摘要: 今天也是想记录工作中出现的两个错误:第一个是服务器应用程序不可用,第二个错误是"IIS虚拟目录名"应用程序中的服务器错误.以上两个错误是把ASP.NET程序配置在IIS上出现的。。。 解决方案: 第一个问题,右键你要配置在IIS上程序所在的文件夹,进入安全选项卡,然后添加ASP.NET账户,设置权限为完全控制 第二个问题,同上步骤,但是这次你需要添加的是everyone账户,同样的勾选完全控制 参...阅读全文

posted @ 2010-06-20 20:00 WTPMCheng 阅读(289) 评论(1) 编辑

2010年6月18日

ASP.NET 程序 配置IIS “PC-Computer\ASPNET” 登录失败

摘要: 这两天把系统重装了一遍,对VS,MSSQL也进行了重装,也把IIS进行了重装(最好与OS版本一致),配置了之前做的一个网站,运行不了,提示"服务器应用程序不可用",按照网上网友提供的解决方案,http://www.cnblogs.com/lemontree/archive/2009/03/04/1403219.html 不知怎么搞的还是没有解决,由于提示这个错误之前,也提示过一个错误就是&ldqu...阅读全文

posted @ 2010-06-18 00:21 WTPMCheng 阅读(432) 评论(0) 编辑

2010年6月15日

asp.net iis 无法显示网页

摘要: 今天,有个朋友问我,怎么把程序配置在IIS上,报了一个错误:"无法显示网页"(找不到服务器),我当时就纳闷了,怎么之前配置的是好好的,怎么今天配的时候就出现了这个问题,我就开始上网查资料,有的人说需要设置用户权限: http://www.2000xg.com/article.asp?id=398也有的人说是其他的问题,具体的问题可是在百度或谷歌上搜搜。。但是当我看到访问的地址时:http://19...阅读全文

posted @ 2010-06-15 21:46 WTPMCheng 阅读(369) 评论(0) 编辑

2010年6月13日

Java 桌面应用程序开发学习笔记一

摘要: 学习Java桌面应用程序开发_登陆窗体最近这段时间公司用Java做C/S的项目,自己去下了个插件(WindowBuilder.Pro.v6.1.1)在Eclipse上运行。由于也是刚开始研究Java swing 想记录下自己的开发中的一点小心得,希望可以帮到需要帮助的人。也同时帮助自己加深了印象。。首先,来看个效果图:这个窗体在运行时,是在屏幕的正中间,并且是固定的大小。。慢!或许你会说这有什么难...阅读全文

posted @ 2010-06-13 14:57 WTPMCheng 阅读(590) 评论(2) 编辑

仅列出标题  

导航

统计

公告