最近,我在用.net做一个c/s的项目,把我做的情况给大家说说。
datagrid是用的c1控件的c1FlexGrid,功能很多。

c#开发windows应用程序几个小技巧_Opa

自定义分组和outlook形式的列头拖拽。

textbox,combobox,checkbox是继承.net自带的控件,自己扩展的。
现在说一说碰到的几个问题,及解决方法:
1.一个应用程序只能被用户打开一次

Process mobj_pro =Process.GetCurrentProcess();
             Process[] mobj_proList=Process.GetProcessesByName(mobj_pro.ProcessName);
             if(mobj_proList.Length>1)
             { 
 
                 MessageBox.Show("当前的应用程序已打开!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                 return;
             }


2.一个框架窗口下只打开一个子窗口

CustomerAdd pobj_CustomerAdd;  
             Form pobj_CustomerAdd_Return=CheckIsExit("CustomerAdd");
             if(pobj_CustomerAdd_Return==null)
             { 
 
                 pobj_CustomerAdd=new CustomerAdd();
                 OpenSheet(pobj_CustomerAdd);
             }
             else
             { 
 
                 OpenSheet((CustomerAdd)pobj_CustomerAdd_Return);
             }  
 void OpenSheet(Form pobj_form)
         { 
             pobj_form.MdiParent=this;
             pobj_form.Show(); 
         }        /** <summary>
         /// 判断窗口是否存在
         /// </summary>
         /// <param name="ps_windowName">窗口的名称</param>
         /// <returns>存在返回此窗口的实例 不存在返回null</returns>
         Form CheckIsExit(string ps_windowName)
         { 
 
             for(int i=0;i<this.MdiChildren.Length;i++)
             { 
 
                 if(this.MdiChildren[i].Name==ps_windowName)
                 { 
 
                     return this.MdiChildren[i];
                 }
             }
             return null;
         }


3.弹出式窗口显示渐变效果
在页面上添加一个timer控件fadeTimer,interval设为50
类的实例变量为

private m_showing=true;
 在form_load中写:
 Opacity = 0.0;
             Activate();
             Refresh();
             fadeTimer.Start();
             Refresh();    在timer控件的Tick事件中写:if (m_showing)
             { 
 
                 double d = 1000.0 / fadeTimer.Interval / 100.0;
                 if (Opacity + d >= 1.0)
                 { 
 
                     Opacity = 1.0;
                     fadeTimer.Stop();
                 }
                 else
                 { 
 
                     Opacity += d;
                 }
             }
             else
             { 
 
                 double d = 1000.0 / fadeTimer.Interval / 100.0;
                 if (Opacity - d <= 0.0)
                 { 
 
                     Opacity = 0.0;
                     fadeTimer.Stop();
                 }
                 else
                 { 
 
                     Opacity -= d;
                 }
             }


4.在控件textbox中实现按回车键相当于tab键的作用

public class OSTextBox:TextBox
     { 
 
         public OSTextBox()
         { 
 
             
         }        bool mb_IsKeyEnter=true;
        [
         Category("Data"),
         DefaultValue(true),
         MergableProperty(false)
         ]
         public bool IsKeyEnter
         { 
 
             get
             { 
 
                 return mb_IsKeyEnter;
             }
             set
             { 
 
                 mb_IsKeyEnter=value;
             }
         }        protected override void OnKeyPress(KeyPressEventArgs e)
         { 
 
             base.OnKeyPress (e);
             if(mb_IsKeyEnter)
             { 
 
                 if (e.KeyChar == (char)Keys.Enter)
                 { 
 
                     SendKeys.Send("{Tab}");
                 }
             }
         }    }


还有很多东西,正在研究中,比如发票套打在c/s中的实现,用.net读取IC卡等,等完成了再给大家共享