当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C# winform下的一个mvc例子

Jorge2年前 (2022-05-09)C#/.net框架754

 

资源列表:

image.png


业务逻辑BLL

C#
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace student{
    public class StudentInstance
    {
        public DataChange onDataChange = null;

        private List<StudentClass> StuList = new List<StudentClass>();

        public List<StudentClass> stuAry        {
            get { return StuList; }
        }

        public void AddStudent(StudentClass ParamStu)
        {
            if (StuList.Contains(ParamStu))
                throw new Exception("student is exist!");
            StuList.Add(ParamStu);
            if (onDataChange != null)
                onDataChange();
        }

        public void delStudent(StudentClass ParamStu)
        {
            StuList.Remove(ParamStu);
            if (onDataChange != null)
                onDataChange();
        }

        public void loadAllData()
        {
            DataSourceManage ds = new DataSourceManage();
            StuList = ds.getStudentData();
            if (onDataChange != null)
            {
                onDataChange();
            }
        }



    }}

控制器部分:

C#
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace student{
    class MVcontrol
    {
        StudentInstance stu;
        public MVcontrol(StudentInstance ParamStu)
        {
            stu = ParamStu;
        }

        public void UpdateTree(TreeView tv)
        {
            tv.Nodes.Clear();
            foreach (StudentClass m in stu.stuAry)
            {
                TreeNode node = new TreeNode();
                node.Tag = m;
                node.Text = m.Name;
                tv.Nodes.Add(node);
            }
        }

        public static void UpdateCbx(ComboBox cbx,Type type)
        {
            cbx.Items.Clear();
            if (type.IsEnum)
            {
                string[] enumStr = Enum.GetNames(type);
                foreach (string m in enumStr)
                {
                    cbx.Items.Add(m);
                }
            }
        }


    }}
C#
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace student{
   public delegate void DataChange();
   public delegate void ThreadDelegate(int js);}
C#
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace student{
    class ThreadClass
    {
        public ThreadDelegate MainThreadUpdate = null;
        public void ThreadFun()
        {
            int i = 0;
            while (true)
            {
                ++i;
                MainThreadUpdate(i);
                Thread.Sleep(2000);
            }
        }

    }}

UI 及逻辑

image.png

C#
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;namespace student{
   
    public partial class MainForm : Form    {
        Thread thread1;
        ThreadClass th;
        StudentInstance stu;
        MVcontrol mvc;

        public MainForm()
        {
            InitializeComponent();
            stu = new StudentInstance();
            stu.onDataChange = dataChange;
            mvc= new MVcontrol(stu);


            this.Load += new EventHandler(MainForm_Load);
            this.FormClosing += new FormClosingEventHandler(MainForm_FormClosing);
            btn_start.Click += new EventHandler(btn_start_Click);
            btn_add.Click += new EventHandler(btn_add_Click);
            btn_del.Click += new EventHandler(btn_del_Click);
            tv_student.AfterSelect += new TreeViewEventHandler(tv_student_AfterSelect);

            th = new ThreadClass();
            th.MainThreadUpdate = ThreadUpdate;
            thread1 = new Thread(new ThreadStart(th.ThreadFun));
            thread1.Start();
        }

        void tv_student_AfterSelect(object sender, TreeViewEventArgs e)
        {
            StudentClass tag = (StudentClass)e.Node.Tag;
            this.txt_id.Text = tag.Id.ToString();
            this.txt_name.Text = tag.Name;
            this.cbx_sex.SelectedIndex = (int)tag.Sex;
            this.txt_age.Text = tag.Age.ToString();
        }

        void btn_del_Click(object sender, EventArgs e)
        {
            stu.delStudent((StudentClass)this.tv_student.SelectedNode.Tag);
        }

        void btn_add_Click(object sender, EventArgs e)
        {
            try
            {
                stu.AddStudent(new StudentClass(
                    Convert.ToInt32(this.txt_id.Text.Trim()),
                    this.txt_name.Text.Trim(),
                    (Sex)this.cbx_sex.SelectedIndex,
                    Convert.ToInt32(this.txt_age.Text.Trim())));
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
            }
        }

        void btn_start_Click(object sender, EventArgs e)
        {
            stu.loadAllData();
        }

        void MainForm_Load(object sender, EventArgs e)
        {
            MVcontrol.UpdateCbx(this.cbx_sex, typeof(Sex));
        }

        private void dataChange()
        {
            mvc.UpdateTree(this.tv_student);
        }

        void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (thread1.IsAlive)
            {
                thread1.Abort();
            }
        }

        public void ThreadUpdate(int js)
        {
            if (this.label5.InvokeRequired)
            {
                ThreadClass th1 = new ThreadClass();
                th1.MainThreadUpdate = ThreadUpdate;
                this.Invoke(th1.MainThreadUpdate, new object[] { js });
            }
            else
            {
                this.label5.Text=js.ToString();
            }
        }
      
    }}


其它部分请下载完整代码查看:


链接:https://pan.baidu.com/s/1acW5ho7kDkft_pHeiwB-2A

提取码:uk3c 


--来自百度网盘超级会员V4的分享


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=68

标签: .NET.NET框架
分享给朋友:

“C# winform下的一个mvc例子” 的相关文章

windows下c#程序提高实时性

windows下c#程序提高实时性

引言:我们手里的运控软件对实时性有了新要求。因为同设备上运行的其它视觉软件对cpu时间有变态的占用,压缩了运控软件的cpu占用时间。我们知道如果视觉软件卡一下,最多是处理时间长一点,但是运控软件卡一下,那就意味着撞机的问题,这个要严重得多。这个问题会持续把研究结果更新到本贴子。(一)提升线程和进程的...

C# 控件闪烁问题的解决

C# 控件闪烁问题的解决

说一下解决C#下控件闪烁的几个问题,如下:  listview和datagridview显示数据闪烁 自定义控件的显示闪烁listbox滚动条拖动闪烁面板中控件过多的闪烁propertyGrid点击和修改项目缓慢的问题richtextbox控件的刷新显示问题此类问题对于界面复杂规...

C# Modelbus crc16计算校验和程序

C# Modelbus crc16计算校验和程序

我们手里一个无刷电机,采用485的modelbus crc16协议来控制。因此需要一个计算校验和的工具。源码:C#using System;using System.Collections.Generic;using System.ComponentModel;usin...

C# tableLayoutPanel动态加载控件闪烁的解决方案

C# tableLayoutPanel动态加载控件闪烁的解决方案

WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。  1.将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高...

C# 当前不会命中断点 还没有为该文档加载任何符号

C# 当前不会命中断点 还没有为该文档加载任何符号

这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了我们手上的项目的问题。我们的工程有几十个项目。我长话短说,解决方法是:引导项目...

C# 查询运算符测试

C# 查询运算符测试

测试一下全部的查询运算符。每天测试一部分,代码会持续更新中……C#using System;using System.Collections;using System.Collections.Generic;using System.Linq;using&nb...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。