c# 类操作 窗体

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

引用: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;

        }

  

相关文章
|
2月前
|
Java 数据库 C#
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
35 0
|
2月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
2月前
|
C#
58.c#:directory类
58.c#:directory类
13 0
|
2月前
|
C#
57.c#:directorylnfo类
57.c#:directorylnfo类
13 0
|
11天前
|
C#
C#如何实现窗体最小化到托盘
C#如何实现窗体最小化到托盘
13 0
|
2月前
|
C#
深入C#中的String类
深入C#中的String类
11 0
|
2月前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍
|
2月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
2月前
|
存储 C# 索引
C#学习相关系列之数据类型类的定义(一)
C#学习相关系列之数据类型类的定义(一)
|
2月前
|
存储 API C#
60.c#:steamreader类
60.c#:steamreader类
12 0