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;

        }

  

相关文章
|
11月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
348 8
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
173 6
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
152 2
|
11月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
585 0
|
11月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
78 0
|
索引 C语言 存储
【C语言】B树和B+树的解析应用
【C语言】B树和B+树的解析应用
122 0
【C语言】B树和B+树的解析应用
C#中的类和继承
C#中的类和继承
|
开发框架 .NET 编译器
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
131 2
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
257 0
|
开发框架 数据可视化 C#
C#中实现无标题栏窗体拖动的代码
C#中实现无标题栏窗体拖动的代码