zoukankan      html  css  js  c++  java
  • c# 类操作 窗体

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

    方法一:

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

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

    1.在form1中添加属性

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳    public string SetLabelText

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳C 类操作窗体控件的方法 - 华夏人 - 江楼风芳    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳{

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳        set

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳C 类操作窗体控件的方法 - 华夏人 - 江楼风芳        C 类操作窗体控件的方法 - 华夏人 - 江楼风芳{

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳            this.Label1.text = value;    

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳         }

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳     }

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳

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

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳public static voic SetText( Form1 objForm )        //这里传递的是Form1窗体类的一个实例

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳C 类操作窗体控件的方法 - 华夏人 - 江楼风芳C 类操作窗体控件的方法 - 华夏人 - 江楼风芳{

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳     objForm.SetLabelText = "hello";                //这样就可以找到我们定义的属性

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳}

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

    C 类操作窗体控件的方法 - 华夏人 - 江楼风芳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;

            }

      

  • 相关阅读:
    WCF开发入门的实例
    转:SQLHelper类,泛型+反射
    设置ASP缓存的几个语句
    ADO.NET总结
    通过反射来实现:DataTable 和List 相互转换
    十步完成windows服务的安装
    dhl:The request for security token could not be satisfied because authentication failed. 调用方未由服务进行身份验证。
    C#中的readonly(运行时常量)与const(编译时常量)的区别
    用do{}创建内联子程序
    用autodie简化错误处理
  • 原文地址:https://www.cnblogs.com/sode/p/2674454.html
Copyright © 2011-2022 走看看