2009-08-28 13:39:00 junherry 阅读数 10148
  • C# For Unity系列之基础篇

          本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!        真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)         本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。       说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    12673 人正在学习 去看看 刘国柱

      在用C#编写文本编辑控件时,遇到了这样的问题。就是要求该控件文本标题格式的设置与文本正文格式的设置分开。要求提供打印预览功能。这种功能需求我们很常见,比如我们在CSDN上写文章时,文章标题与文章正文是分开的,我们可以预览已经写好的文章,只是本篇文中的文档编辑控件的需求更细一些,就是能够单独设置标题格式,同时还要求在点击打印预览按钮时,能够看到全文效果,即要包括文章标题和正文,其中文章标题占一行并居中显示。控件UI如下图所示。

 控件UI

 

      我们给当前的富文本框对象取名为curRichTextBox,该对象包含的内容就是文章的正文。当点击“打印预览”按钮时,我们需要深度拷贝一个curRichTextBox原型,使curRichTextBox内容即文章正文不受打印预览的影响,这里相当于设计模式中的原型模式。

      由于打印预览时,富文本框的内容要包括标题和正文。那么我们新建一个RichTextBox对象,名为tempRtb。

     

 

      这样,就能够保留被插入文本的格式信息,达到打印预览整篇文章的效果,同时保证了curRichTextBox的内容也没有被改变。如果用tempRtb.Text = tempRtb.Text.insert( start , len )方法或tempRtb.AppendText(curRichTextBox.Rtf.ToString()),就不能保留被插入文本的格式信息,因为这种方法中插入的不含格式信息的字符串。

2009-07-17 11:37:00 moxifeng 阅读数 288
  • C# For Unity系列之基础篇

          本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!        真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)         本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。       说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    12673 人正在学习 去看看 刘国柱

source:http://blog.csdn.net/gisfarmer/archive/2009/07/16/4353327.aspx

一.            概述

在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作。对于不同的应用场景,使用的策略也不尽相同。

1.      后台循环任务,少量UI更新:例如批量上传文件,并提供进度。这种情况使用BackgroundWorker组件是非常好的选择。

2.      耗时的后台任务:这里的耗时任务是指一个时间较长的任务,并且不能精确获取进度,如:调用一个远程WebService接口。这种情况可以开两个线程,一个工作,一个更新UI(不能提供进度,只能显示动画表示系统在运行中)。

3.      耗时的UI任务:当工作压力集中在UI响应上时,可以在工作者线程中增加延时,从而让UI线程获得响应时间。整个工作的总体时间会增加,但用户响应效果会好很多。

 

二.            后台的循环任务,少量UI更新

这种情况使用BackgroundWorker组件是最好的选择。(详见附一)

 

三.            后台耗时任务

在后台执行一个不可分解的耗时任务,需要进行界面更新,以便让客户看上去程序有所响应。这种情况下,UI线程一般也不知道工作线程何时结束,所以一般执行循环任务,当工作线程结束后,关闭UI线程就可以了。

Thread uithread = null;

        private void btnStart_Click(object sender, EventArgs e)

        {

            uithread = new Thread(new ThreadStart(this.UpdateProgressThread));

            uithread.Start();

 

            Thread workthread = new Thread(new ThreadStart(this.DoSomething));

            workthread.Start();

        }

 

        private void DoSomething()

        {

            Thread.Sleep(5000);

             uithread.Abort();

             MessageBox.Show("work end");

        }

 

        private void UpdateProgressThread()

        {

            for (int i = 0; i < 10000; i++)

            {

                Thread.Sleep(100); 

                this.Invoke(new Action<int>(this.UpdateProgress), i);

            }

        }

 

        private void UpdateProgress(int v)

        {          

            this.progressBar1.Value = v;

    }

 

这里只要注意一点:线程调用的方法都不能访问用户控件,必须通过委托调用Form的方法来实现界面更新。

 

四.            耗时的UI任务

当整个工作压力集中在UI响应上时,可以在工作者线程中增加延时,从而让UI线程获得响应时间。整个工作的总体时间会增加,但用户响应效果会好很多。

private void FormInitForm_Load(object sender, EventArgs e)

        {

            this.listView1.Items.Clear();

            Thread workthread = new Thread(new ThreadStart(this.DoSomething));

            workthread.Start();

        }

 

        private void DoSomething()

        {

            for (int i = 0; i < 30; i++)

            {

                this.Invoke(new Action<int>(this.LoadPicture), i);

                Thread.Sleep(100);

            }

        }

 

        private void LoadPicture(int i)

        {

            string text = string.Format("Item{0}", i);

            ListViewItem lvi = new ListViewItem(text, 0);

            this.listView1.Items.Add(lvi);

            Thread.Sleep(200);//模拟耗时UI任务,非循环,不可分解

        }

 

五.            补充

1.        Invoke 和 BeginInvoke

在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而以,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。

 

2.        Application.DoEvent

在耗时的循环的UI更新的方法中,插入Application.DoEvent,会使界面获得响应,Application.DoEvent会调用消息处理程序。

private void button2_Click(object sender, EventArgs e)

        {

            for (int i = 0; i < 30; i++)

            {

                string text = string.Format("Item{0}", i);

                ListViewItem lvi = new ListViewItem(text, 0);

                this.listView1.Items.Add(lvi);

                Thread.Sleep(200);

                for (int j = 0; j < 10; j++)

                {

                    Thread.Sleep(10);

                    Application.DoEvents();

                }

            }           

        }

3.        Lock

lock(object)

{

}

等价与

try

            {

                Monitor.Enter(object);

            }

            finally

            {

                Monitor.Exit(object)

       }

 

附一:

BackgroundWorker组件使用说明

一.            概述

BackgroundWorker是·NET 2.0提供的一个多线程组件,在应用程序中使用,可以非常简单方便地实现UI控件通信,并自动处理多线程冲突问题。

 

二.            基本属性

1.      WorkerReportsProgress ,bool:是否允许报告进度;

2.      WorkerSupportsCancellation,bool:是否允许取消线程。

3.      CancellationPending,bool,get:读取用户是否取消该线程。

 

三.            基本事件

1.      DoWork:工作者线程

2.      RunWorkerCompleted :线程进度报告

3.      ProgressChanged:线程结束报告

 

四.            基本方法

1.      RunWorkerAsync() :启动工作者线程;

2.      CancelAsync():取消工作者线程;

3.      ReportProgress(int);   报告进度

 

五.            代码

//启动

private void btnStart_Click(object sender, EventArgs e)

{

    this.btnStart.Enabled = false;

    this.btnStop.Enabled = true;

 

    this.backgroundWorker.RunWorkerAsync();

}

 

//通知线程停止

private void btnStop_Click(object sender, EventArgs e)

{

    this.backgroundWorker.CancelAsync();

}

 

//工作者线程

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)

{

    for (int i = 0; i < 150; i++)

    {

        if (backgroundWorker.CancellationPending)   //查看用户是否取消该线程

        {

            break;

        }

 

        System.Threading.Thread.Sleep(50);          //干点实际的事

 

        backgroundWorker.ReportProgress(i);         //报告进度

    }

}

 

//线程进度报告

private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)

{

    this.progressBar1.Value = e.ProgressPercentage * 100 / 150;

}

 

//线程结束报告

private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{           

    this.btnStart.Enabled = true;

    this.btnStop.Enabled = false;

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gisfarmer/archive/2009/07/16/4353327.aspx

2016-07-15 17:35:00 weixin_30260399 阅读数 49
  • C# For Unity系列之基础篇

          本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!        真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)         本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。       说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    12673 人正在学习 去看看 刘国柱

刚接触c#,依照惯例,写个简单的计算器,只写了加法,乘法,其他的类似,编辑器用的vs2008

首先打开vs ,新建c#的Windows窗体应用程序,接下来的项目的名称是WindowsFormsApplication2,不是WindowsFormsApplication3。

然后设计计算器的ui界面,比较简单,请谅解。。。

接下来就是编码,首先要给按钮增加点击事件,代码如下:

button1.Click += new EventHandler(Btns_Click);
button2.Click += new EventHandler(Btns_Click);

但是这两行代码不能单独放在代码里,需要放在一个方法里面;

private void addOperatorBtns()
{

button1.Click += new EventHandler(Btns_Click);
button2.Click += new EventHandler(Btns_Click);

}

然后还要声明该方法:

private void Form1_Load(object sender, EventArgs e)
{
addOperatorBtns();
}

接下来就是该点击事件方法的代码实现:

private void Btns_Click(object sender, EventArgs e) //按钮Click事件
{

Button m_CurBtn = (Button)sender;
switch (m_CurBtn.Name)
{
case "button1":
{
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = a + b;

textBox3.Text = c+" "; 
break;
}
case "button2":
{
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = a * b;

textBox3.Text = c + " "; 
break;
}

}

}

 

最后 Form1.cs里面的全部代码如下:

   

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;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{

double a = 0;
double b = 0;
double c = 0;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
addOperatorBtns();
}

private void label1_Click(object sender, EventArgs e)
{

}

private void addOperatorBtns()
{

button1.Click += new EventHandler(Btns_Click);
button2.Click += new EventHandler(Btns_Click);

}

private void Btns_Click(object sender, EventArgs e) //按钮Click事件
{

Button m_CurBtn = (Button)sender;
switch (m_CurBtn.Name)
{
case "button1":
{
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = a + b;

textBox3.Text = c+" "; 
break;
}
case "button2":
{
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = a * b;

textBox3.Text = c + " "; 
break;
}

}

}

private void button2_Click(object sender, EventArgs e)
{

}

 

 

}
}

 

转载于:https://www.cnblogs.com/yalong/p/5674350.html

2016-03-08 15:17:32 abcSunl 阅读数 4223
  • C# For Unity系列之基础篇

          本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!        真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)         本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。       说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    12673 人正在学习 去看看 刘国柱

三层架构分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)再加上实体类库(Model)

转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688

1、实体类库(Model),主要存放数据库中的表字段。

操作:

 (1)先建立实体类库Model,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名Model--》确定

(2)选中Model类库--》Shift+ALT+C--》建立实体类。UserInfo类

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. namespace Model  
  2. {  
  3.    public  class UserInfo  
  4.     {  
  5.         public string  UserName { getset; }  
  6.         public string  Password { getset; }  
  7.     }  
  8. }  

2、数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作

操作:

(1)先建立数据访问层类库DAL,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名DAL--》确定

(2)在DAL中添加对Model的引用,选中DAL--》Alt+P+R--》解决方案--》项目--》选中MOdel--》确定

(3)在DAL中添加对system.configuration的引用,选中DAL--》Alt+P+R--》程序集--》框架--》选中System.configuration--》确定

(4)建立数据访问类,选中DAL--》Shift+ALT+C--》建立数据访问类。UserDB类

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. using System.Configuration;  
  2. using Model;  
  3. using System.Data;  
  4. using System.Data.SqlClient;  
  5.   
  6. namespace DAL  
  7. {  
  8.     class UserDB  
  9.     {  
  10.         private string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();  
  11.         public int AddUser(UserInfo userInfo)  
  12.         {  
  13.             //对数据库进添加一个用户操作  
  14.             string commandText = "insert into UserInfo (userName,Password)values(@userName,@Password)";  
  15.             SqlParameter[] paras = new SqlParameter[]  
  16.             {   
  17.            new SqlParameter ("@userName",userInfo.UserName ),  
  18.            new SqlParameter ("@Password",userInfo.Password )  
  19.             };  
  20.             return SqlHelper.ExecuteNonQuery(connString, CommandType.Text, commandText, paras);  
  21.         }  
  22.     }  
[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //添加其他对数据库操作  
  2. }  
3、业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。

(1)先建立业务逻辑层类库BLL,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名BLL--》确定

(2)在BLL中添加对Model、DAL的引用,选中BLL--》Alt+P+R--》解决方案--》项目--》选中MOdel、DAL--》确定

(3)建立业务逻辑类,选中BLL--》Shift+ALT+C--》建立业务逻辑类。LoginManager类

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. using DAL;  
  2. using Model;  
  3.   
  4. namespace BLL  
  5. {  
  6.     public class LoginManager  
  7.     {  
  8.         private UserDB userDB = new UserDB();  
  9.         public bool Add(UserInfo userInfo, out string messageStr)  
  10.         {  
  11.             messageStr = "";//返回界面层添加用户返回信息  
  12.             bool isSuccess = false;  
  13.             if (userInfo.UserName.Trim().Length != 0)//判断从传递来的username是否为空  
  14.             {  
  15.                 if (userDB.IsEquals(userInfo))//传给DALl操作判断数据库中是否有重复值  
  16.                 {  
  17.                     userDB.AddUser(userInfo);//传给DAL操作增加一个新用户  
  18.                     isSuccess = true;  
  19.                 }  
  20.                 else  
  21.                     messageStr = "有相同的值";  
  22.             }  
  23.             else  
  24.             {  
  25.                 messageStr = "不能为空";  
  26.   
  27.             }  
  28.             return isSuccess;//返回界面层是否添加成功  
  29.         }  
  30.     }  
  31. }  

5、表现层(UI)即用户界面层

(1)在UI中添加对Model、BLL的引用,选中UI--》Alt+P+R--》解决方案--》项目--》选中MOdel、BLL--》确定

(2)编写代码传递数据给BLL层。

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.     UserInfo userInfo;  
  2.     LoginManager lm = new LoginManager();  
  3.     private void btnAdd_Click(object sender, EventArgs e)  
  4.     {  
  5.         userInfo = new UserInfo()  
  6.         {  
  7.             UserName = txtUserName.Text.Trim(),  
  8.             Password = txtPassword.Text.Trim()  
  9.         };  
  10.         string messageStr = "";  
  11.   
  12.         if (lm.Add(userInfo, out  messageStr))  
  13.         {  
  14.             MessageBox.Show("添加成功");  
  15.         }  
  16.         else  
  17.         {  
  18.             MessageBox.Show(messageStr);  
  19.             txtUserName.Focus();  
  20.         }  
  21.   
  22.     }  
  23. }  

转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688

Unity_NGUI介绍_038

阅读数 225

没有更多推荐了,返回首页