Winform 学习初级 从WebForm到WinForm

    一直在做c# 的Web程序,近期由于要用winfrom做个小项目,觉得无从下手,特把痛苦经历记载一下:

  先把窗体结构 展示一下:

   2009022016370080.jpg

2009022016373168.jpg2009022016375037.jpg

   WEB一个项目多个页面,页面跳转是通过链接来进行页面跳转的,而winfrom没有url,只能通过:

ContractedBlock.gif ExpandedBlockStart.gif Code
            Login lg = new Login();
            lg.MsgStr 
= "主窗口弹出信息";
            lg.SetLabelText();
            lg.ShowDialog();
            
if (lg.DialogResult == DialogResult.OK)
            {
                
string userName = lg.MsgStr;
                lbl_msg.Text 
= "登陆成功!"+userName;
            }
            
else
            {
                lbl_msg.Text 
= "登陆失败!";
            }

被调用的Login 属性和提交代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
        private  string msgStr = "登陆信息";
        
public  string MsgStr
        {
            
set
            {
                msgStr 
= value;
            }
            
get
            {
                
return msgStr;
            }
        }



        
private void bt_Sub_Click(object sender, EventArgs e)
        {
            
string userName = tb_user.Text;
            
string psd = tb_psd.Text;
            msgStr 
= userName;
            
if (userName == "kinm")
            {
                
this.DialogResult = DialogResult.OK;
                
this.Close();
            }
            
else
            {
                
this.DialogResult = DialogResult.No;
            }
        }

   通过窗体的ShowDialog()来展开新窗体。当然也可用用lg.Show(),不过ShowDialog的好处是可用返回结果。

  if (lg.DialogResult == DialogResult.OK) 和login的this.DialogResult = DialogResult.OK; 这2句就可用判断登陆窗口是否通过验证了。

 lg.MsgStr = "主窗口弹出信息"; 和 string userName = lg.MsgStr; 通过login的MsgStr 属性 来实现父窗口给子窗口传值,父窗口获得子窗口的返回值。

 

 你可能会问,winform没有起始页,它又怎么进mainform 按我们的步骤走了,其实一切都在Program.cs里的Main()函数里,这是程序的入口:

ContractedBlock.gif ExpandedBlockStart.gif Code
        [STAThread]
        
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(
false);
            Application.Run(
new MainForm());
        }

 Application.Run(new MainForm()); 这句就是弹出MainForm窗口 

 进入主窗体,我的信息主体采用DataGridView,这个控件比较诡异,只接受DataTable的数据集,你给它DataSet它还用不了,而且还没分页功能,也没修改删除那种很直接的事件,也没模板,感觉和GridView没的比,此控件还在研究中,跳过!

 数据一步步来,为了找点成就感,也为了避开写修改要获取,行,关键字问题,先做个新增窗体,UserAdd:

  把控件拖完,突然发现没有验证控件,由于数据要插入数据,如果不验证的话,会读取很多脏数据,综合了下网上的资料,决定采用ErrorProvider报警,用焦点锁定错误控件。

ContractedBlock.gif ExpandedBlockStart.gif Code
        private void tb_user_Validating(object sender, CancelEventArgs e)
        {
            
if (tb_user.Text == "" || tb_user.Text == string.Empty)
            {
                SetErrorControl(tb_user, 
"用户名不能为空!");
                e.Cancel 
= true;
            }
            
else
            {
                SetErrorControl(tb_user, 
"");
            }
        }

        
private void SetErrorControl(Control ctL,string errorMsg)
        {
            erpd_Main.SetError(ctL, errorMsg);
        }

 SetErrorControl(tb_user, "用户名不能为空!");灌错误信息e.Cancel = true;把窗体焦点锁定在出错控件

 先试试,呵呵,在tb_user控件里点了下,去点别的控件,就点不了了。 记得CauseValidation属性被设置为True(此为默认值)

然后把密码和密码确认也做了,但现在直接点提交,啥都没输,竟然直接通过了,哎,由于鼠标没点进去,所以我们的判断事件根本没执行。所以得在提交按钮再判断次:

ContractedBlock.gif ExpandedBlockStart.gif Code
        private void bt_Sub_Click(object sender, EventArgs e)
        {
            
if (tb_user.Text == "" || tb_user.Text == string.Empty)
            {
                SetErrorControl(tb_user, 
"用户名不能为空!");
                tb_user.Focus();
                
return;
            }

            lbl_Show.Text 
= "登陆成功!";
        }

人为指定焦点,并中断往下执行,这样就达到了验证的效果了。

 至于数据集构筑,和数据处理,那是数据层的事,反正数据层是class类库,这点拿WEB数据层过来就行。

 最后说下,web 是 web.config 而 winform是app.config 你把一些字段依然可用存储在 <configuration> 里的<appSettings>,也可用把连接字段放在<connectionStrings>

ContractedBlock.gif ExpandedBlockStart.gif Code
System.Configuration.ConfigurationManager.ConnectionStrings["OleConnString"].ConnectionString;

记得 “引用”System.configration 否则会提示找不到ConfigurationManager 这个在web里自动引用了,不需要手动。

至于项目中的路径 暂时还没找到一个像 server.mapPath()这么好用的相对路径方法。

转载于:https://www.cnblogs.com/kinms/archive/2009/02/20/1395025.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值