• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c#类操作窗体

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

引用:http://cgxcn.blog.163.com/blog/static/132312422009542570727/

方法一:

我在做一个聊天程序的时候遇到这样一个问题,我需要将操作类与窗体分离,就是说类来实现所有的操作,窗体类中只进行调用类,如果是简单的操作,很容易实现,但是如果里面设计到有参数或有返回的线程,就可能有些困难,所以在这里说一下,用类来控制窗体部分控件的方法.就写一个很简单的例子:

比如说现在我们有一个form1窗体,上面有一个label1控件,现在我们要实现执行Class1类来改变label1.text为"hello",可以这样来作:

1.在form1中添加属性

    public string SetLabelText

    {

        set

        {

            this.Label1.text = value;    

         }

     }

 

2.然后可以在Class1的类中写一个方法

public static voic SetText( Form1 objForm )        //这里传递的是Form1窗体类的一个实例

{

     objForm.SetLabelText = "hello";                //这样就可以找到我们定义的属性

}

 

3.在Form1里的相应事件中写入

Class1.SetText( this );

 

这样就可以将窗体作为参数传入类,然后可以根据属性来对其进行相应的操作,如果动动脑筋,可以实现更多.

方法二:

   带线程的操作

主窗体:FrmBackup.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Threading;

namespace DataBackup

{

    public partial class FrmBackup : Form

    {

   public FrmBackup()

        {

            InitializeComponent();           

            Control.CheckForIllegalCrossThreadCalls = false;

        }

        #region 重写窗体属性<不同类调用的地方>

        public bool SetForm

        {

            set

            {

                this.Enabled = value;               

            }          

        }

        public bool SetProgressBar

        {

            set

            {

                this.progressBar.Visible = value;

            }

        }

        #endregion

           

        #region 恢    复

        private void btnRegain_Click(object sender, EventArgs e)

        {

            this.Enabled = false;

            OpenFileDialog op = new OpenFileDialog();

            //标题

            op.Title = "选择数据库备份文件";

            //文件初始路径

            op.InitialDirectory = dbpath;

            //当前文件名筛选器

            op.Filter = "数据库文件(*.mdb)|*.mdb";

            //文件对话框中当前选定筛选器的索引

            op.FilterIndex = 1;

            if (op.ShowDialog() == DialogResult.OK)

            {

                //显示进度条

                this.progressBar.Visible = true;

                this.progressBar.BringToFront();

                this.progressBar.Size = new Size(307, 35);

                this.progressBar.Location = new Point(81, 157);

                this.progressBar.Maximum = 100;

                this.progressBar.Step = 1;

                string source_path = "..\\DbMVC\\bin\\gs_gw680.mdb";

                //进度条线程

                Thread td1 = new Thread(new ThreadStart(PrgBar));

                td1.IsBackground = true;

                td1.Start();

                //数据库文件名

                string dbname = op.FileName;

     //这里就是使用线程的地方,把当前窗体用this传过去

                BackOther bac = new BackOther(dbname, source_path, this);

                Thread rec = new Thread(new ThreadStart(bac.RecoverAcsInfo));

                rec.IsBackground = true;

                rec.Start();

            }

        }

        #endregion

   }

}

需要改变窗体控件属性的类,如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Windows.Forms;

using System.Data.OleDb;

namespace DataBackup

{

    /// <summary>

    /// Self_Class:关于备份操作的其它方法

    /// </summary>

    public class BackOther

    {

        public BackOther()

        {

        }

        #region 构造函数相关<接收窗体及其要传的值>

        string db_path = string.Empty;

        string source_path = string.Empty;

        FrmBackup frm_bk = null;

        public BackOther(string path, string sourcepath, FrmBackup frmbk)

        {

            this.db_path = path;

            this.source_path = sourcepath;

            this.frm_bk = frmbk;

        }

        #endregion

        #region 本类全局变量

        /// <summary>

        /// Self_Variable:连接对象

        /// </summary>

        private OleDbConnection objAcsSqlConnection = null;

        /// <summary>

        /// Self_Variable:恢复数据库对象

        /// </summary>

        private OleDbConnection objSqlConnection = null;

        #endregion

        #region 数 据 恢 复

        /// <summary>

        /// Self_Function:数据恢复

        /// </summary>

        /// <param name="path">备份数据库路径</param>

        /// <param name="dbpath">恢复的目的数据库</param>

        /// <returns>TRUE or FALSE </returns>

        public void RecoverAcsInfo()

        {

            try

            {

               //其它代码......          

            }

            catch (Exception)

            {

                throw;

            }

            finally

            {

                //改变FrmBackup窗体属性的入口

                MessageBox.Show("恢复完成!");

                SetText(frm_bk);               

            }

        }

        /// <summary>

        /// Self_Form:跨类改变控件属性

        /// </summary>

        /// <param name="objForm">传递的是FrmBackup窗体类的一个实例</param>

        public static void SetText(FrmBackup objForm)       

        {

            //这样就可以找到我们定义的属性

            objForm.SetForm = true;

            objForm.SetProgressBar = false;

        }

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PCBGenesis脚本C#使用WPF窗体实现方法发布时间:2022-07-10
下一篇:
C#中类和结构体发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap