More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  CSST Development LogProfileFriendsBlogMore Tools Explore the Spaces community

CSST Development Log

No list items have been added yet.
December 12

简单Blog程序(附源码)

程序使用VS2008开发,框架使用.Net 2.0,是在别人的Blog的基础上修改而来的,主要原因在使用原BLOG程序时发布网站后无法使用,后来自已在其原来的基础上换了编缉器为FckEditor,先上几张图

源码:
/Files/chenzz/cs_blog.zip

November 18

项目心得(代码篇)

1.       如果一个字符串是由多个字符串拼接("hello"+"world")而成,建议使用string.Format函数实现同样功能,这样不仅可读性高,而且效率也高(特别是在组合SQL语句时,使用此方法更有利于SQL的阅读),比如下列代码:

string msg = "\r\n---------Log Time:" + System.DateTime.Now.ToString() + "--------\r\n" + text;

换成

string msg = string.Format("\r\n---------Log Time:{0}--------\r\n{1}", System.DateTime.Now.ToString(), text);

 

   string xx = string.Format("Select * From Test Where Id={0}", 1);

 

好一点

关于此用法,我们还可以在StringBuilder变量中用得到,比如以下语句:

   System.Text.StringBuilder sb = new System.Text.StringBuilder();

   sb.AppendFormat("Exception is {0}", ex.ToString());

 

2.       枚举变量的声明,声明变量之后可加冒号,也可不加,如果枚举变量类型不多,可以指定成员变量类型为byte,可以节省存储空间(不过这个意义一般,不是很大)

    public enum OperateType : byte

    {

        Add,

        Modify,

        Delete,

        Unknown

    };

3.       错误日志记录,为了防止在程序运行期间抛出未在程序中处理的错误,可在程序入口处(main函数体中)加入以下代码来记录具体出错日志

            //-----------处理应用程序中未捕获的错误,记录到日志-------------

            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

            //-------------------------------------------------------------

 

        private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)

        {

            string errMsg = string.Format("Application.ThreadException Occurs:\r\n{0}", e.Exception.ToString());

            Utility.LogMsg.WriteLogToApplicationFolderByMonth(errMsg);

            //throw new NotImplementedException();

        }

这样可以把运行期间未在程序中处理的错误全部记录下来,以备调试可用

 

4.单件模式的使用,很多时候我们需要限定类只有一个实例,这时我们可以考虑使用单件模式来实限此功能,比如我们在一般应用程序中,必须要限定某个窗体只能打开一个,不允许有多个实例,可以使用下面方法

 

        private static MDIMainForm _instance;

 

        public static MDIMainForm Instance()

        {

            if (_instance == null)

            {

                _instance = new MDIMainForm();

            }

            return _instance;

        }

然后把构造函数定义为私有的,不允许直接调用构造函数直接实例化,如下所示

        private MDIMainForm()

        {

            InitializeComponent();

        }

 

4.     递归算法,项目中有一个无限分类的树,需要穷举出树的所有结点,因为不能确定树的层数(也不允许限定层数,因为可以是N),想了很多方法都不行,最后才想到使用递归,实现起来容易多了,当然我们可以根据这个算法解决很多类似问题,解决方案可参考

        #region 无限分类实现(使用递归方法实现)

        private void BindToTreeView(int partentID, TreeNode node)

        {

            string loadedItem = string.Empty; //已加载条目

 

            DataRow[] drs = dtClass.Select("ParentID=" + partentID);

            foreach (DataRow dr in drs)

            {

                string rowTag = dr["Class_ID"].ToString().Trim();

                if (loadedItem.Contains(rowTag)) continue;

 

                loadedItem += rowTag;

 

                string nodeItemName = dr["Name"].ToString().Trim();

                TreeNode subNode = new TreeNode(nodeItemName);

 

                subNode.Tag = dr["Class_ID"].ToString().Trim();

                subNode.ToolTipText = dr["Description"].ToString().Trim();

 

                if (node == null)

                {

                    this.treeViewClass.Nodes.Add(subNode);

                }

                else

                {

                    node.Nodes.Add(subNode);

                }

 

                if (dtClass.Select("ParentID=" + dr["Class_ID"].ToString()).Length > 0)

                {

                    BindToTreeView(int.Parse(dr["Class_ID"].ToString()), subNode);

                }

            }

        }

        #endregion

October 24

CSST软件界面预览

软件为一进销存软件,现在软件正处于开发初期,很多工作还需要去做,以下为现阶段软件界面预览,总的界面有VS2003风格
VTheme.3
 
感谢访问!