winforms小项目技术

1.在做多文档窗体MDI中多个界面切换用到的技术
不用复杂的if else 判断,下面的技术可以化繁为简:
private void tsbMemberConsume_click(object sender,EventArgs e)
{
 foreach(Form form in Application.openForms)
 {
  if(form.Name=="FormName")
  //managerForm.WindowState = FormWindowState.Maximized;
  form.Active();
  return;
 }
 //for循环中的Application.openForms的意思是获取应用程序中打开窗体的集合。如果一个窗体还没有被打开,那么这个集合中就不会有他,那么执行下面的操作,如果已经打开了,让这个窗体获得激活,并return不在创建。
 
 FormName form=new FormName();
 form.MdiParent=this;
 form.show();
}
2.MDI多文档窗体是否可以每次都打开一个窗体呢?
3.关于关闭窗体时弹出对话框:
(1)关闭总的关闭按钮
  DialogResult result = MessageBox.Show("确定要关闭窗口?", "提示窗口", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            if (result == DialogResult.OK)
            {
                e.Cancel = false;
            }
            if(result==DialogResult.Cancel)
            {
                e.Cancel = true;
            }
(2)关闭某一个按钮
private void toolStripButton1_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("确定要关闭窗口?", "提示窗口", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            if (result == DialogResult.OK)
            {
                this.Dispose();
                this.Close();
            }
            if (result == DialogResult.Cancel)
            {
                return;
            }
        }
4,一些GridView的属性
(1)RowHeadersVisible:指示是否显示行的标题。
(2)ScrollBars:滚动条的类型.
(3)选择一个单元格=选择一行的属性:SelectionMode:FullRowSelect

5。对于父窗体上多个子窗体的布局可以这样:

 private void tsbMemberConsume_Click(object sender, EventArgs e)
        {
            foreach (Form form in Application.OpenForms)
            {
                if (form.Name == "MemberConsume")
                {
                    pnlTemp.Controls.Add(form);
                    form.BringToFront();
                    return;
                }
            }
            memberConsumeForm = new MemberConsume();
            memberConsumeForm.WindowState = FormWindowState.Maximized;
            memberConsumeForm.TopLevel = false;
            pnlTemp.Controls.Add(memberConsumeForm);           
            memberConsumeForm.Show();
        }

6.两个窗体,点击第一个窗体的按钮,弹出模式窗体,保存,第一个窗体的dateGridView刷新。
(1)把第二个窗体的保存和取消按钮的DialoResult分别设置成OK和Cancel
(2)在子窗体写代码

(3)在父窗体写代码
  WareSortAdd wareSortAdd = new WareSortAdd();
            if (wareSortAdd.ShowDialog() == DialogResult.OK)
            {
                GetTable();
            }
 //查询表中的数据
        public void GetTable()
        {
            string sql = "select * from wareSort";
            DataTable dt = WareManager.SelectWareSort(sql);
            this.dgvWareSort.DataSource = dt;           
        }
7窗体间传值技术

8.WinForms中的Combox绑定DateTable的问题:

combox的SelectedIndexChanged事件,在datasouce指定的时候就被触发了,这时候数据还没有绑定好,自然会报错.

我认为这是不合理的.SelectedIndexChanged不应该在绑定数据的中间被触发.

我最后解决办法是设置了一个标志符isLoaded,bool类型,在填充方法完毕后,设为true.允许SelectedIndexChanged被触发.

代码如下:

/// <summary>
        /// 绑定cmbdoc数据的方法
        /// </summary>
private void FillCmbDoc()
        {
            //新建文档类的集合
            Class.ClassDocCollection items1 = new DocAddin.Class.ClassDocCollection();
            //提取所有文档数据,填充到集合
            items1.FillInAllDoc();

            cmbDoc.DataSource = items1;
            cmbDoc.DisplayMember = "S名称";
            cmbDoc.ValueMember = "I编号";
            //设置标志符,true说明该combox已经绑定好了,允许SelectedIndexChanged事件被触发了.
            isLoaded = true;
          
        }
9.在窗体1中点击按钮弹出一个模式窗体2,然后点击窗体2中的保存按钮,如果保存成功,关闭模式窗体,同时刷新DataGriedView,如果保存失败,保持模式窗体:
(1)在窗体2中,把保存按钮的可访问性设置为public,它的Click事件这么写:
public void Click()
{
 int num=操作数据库的代码
 if(num>0)
{
 保存按钮.tag="OK";
 this.Close();
}
}
public void 窗体1的Click()
{
 窗体2.showDialog();
 if(窗体2.保存按钮.tag=="OK")
 {
  刷新DataGridView的代码;
 }
}

10.下拉列表Combox的属性:DropDownStyle决定下拉框是否可以输入。


11.用打开文件控件,打开一个图片文件,为界面的控件设置与该图片的关系:
(1)首先是拖入一个打开文件的控件:openFileDialog1
(2)然后在按钮的点击按钮中写入相应的事件:
DialogResult result=this.openFileDialog();
if(result==DialogResult.OK)
{
 string fileName=this.openFileDialog1.FileName;//对话框选中哪个文件,这个对话框就会包含该文件的字符串名。
 try{
 this.pictrueBox1.BackgroundImage=Image.FromFile(fileName);//从指定的文件中创建Image.
 }catch{return;}
}

12.窗体的样式:
ControlBox:可以控制窗体是否可以有控件/菜单栏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值