分享C#中几个可用的类

2019-12-30 12:24:17王冬梅

例如:


 //以返回表的方式加载下拉框
 public DataTable LoadCombox()
 {
 string sql = "select * from Grade";
 DataTable dt = SQLHelper.ExecuteDataTable(sql);
 return dt;
 }

2.MyTool类(DataTable转List<>)


using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace MySchool.DAL
{
 public class MyTool
 {
 /// <summary>
 /// DataSetToList
 /// </summary>
 /// <typeparam name="T">转换类型</typeparam>
 /// <param name="dataSet">数据源</param>
 /// <param name="tableIndex">需要转换表的索引</param>
 /// <returns></returns>
 public List<T> DataTableToList<T>(DataTable dt)
 {
 //确认参数有效
 if (dt == null )
 return null;
 List<T> list = new List<T>();

 for (int i = 0; i < dt.Rows.Count; i++)
 {
 //创建泛型对象
 T _t = Activator.CreateInstance<T>();
 //获取对象所有属性
 PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
 for (int j = 0; j < dt.Columns.Count; j++)
 {
  foreach (PropertyInfo info in propertyInfo)
  {
  //属性名称和列名相同时赋值
  if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
  {
  if (dt.Rows[i][j] != DBNull.Value)
  {
  info.SetValue(_t, dt.Rows[i][j], null);
  }
  else
  {
  info.SetValue(_t, null, null);
  }
  break;
  }
  }
 }
 list.Add(_t);
 }
 return list;
 }
 }
}

例如: 


 public List<Grade> Loadcombox2() 
 {
 string sql = "select * from Grade";
 DataTable dt = SQLHelper.ExecuteDataTable(sql);
 //方法一:
 foreach (DataRow row in dt.Rows)
 {
  //每一个row代表表中的一行,所以一行对应一个年级对象
  Grade grade = new Grade();
  grade.GradeId = Convert.ToInt32(row["gradeid"]);
  grade.GradeName = row["gradename"].ToString();
  list.Add(grade);
 }

 //方法二:(使用MyTool类)
 MyTool tool=new MyTool();
 list = tool.DataTableToList<Grade>(dt);
 return list;
 }

3.DGMsgDiv类(可生成自己的控件) 

C#,类


using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

/// <summary>
/// 消息条回调函数委托
/// </summary>
public delegate void DGMsgDiv();
 /// <summary>
 /// 消息条类 带Timer计时
 /// </summary>
public class MsgDiv : System.Windows.Forms.Label
{
 private Timer timerLable = new Timer();
 /// <summary>
 /// 消息回调 委托对象
 /// </summary>
 private DGMsgDiv dgCallBack = null;

 #region 计时器
 /// <summary>
 /// 计时器
 /// </summary>
 public Timer TimerMsg
 {
 get { return timerLable; }
 set { timerLable = value; }
 } 
 #endregion

 #region MsgDiv构造函数
 /// <summary>
 /// MsgDiv构造函数
 /// </summary>
 public MsgDiv()
 {
 InitallMsgDiv(7, 7);
 }

 /// <summary>
 /// MsgDiv构造函数
 /// </summary>
 /// <param name="x">定位x轴坐标</param>
 /// <param name="y">定位y轴坐标</param>
 public MsgDiv(int x, int y)
 {
 InitallMsgDiv(x, y);
 }
 #endregion

 #region 初始化消息条
 /// <summary>
 /// 初始化消息条
 /// </summary>
 private void InitallMsgDiv(int x, int y)
 {
 this.AutoSize = true;
 this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
 this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
 //this.ContextMenuStrip = this.cmsList;
 this.Font = new System.Drawing.Font("宋体", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
 this.ForeColor = System.Drawing.Color.Red;
 this.Location = new System.Drawing.Point(x, y);
 this.MaximumSize = new System.Drawing.Size(980, 525);
 this.Name = "msgDIV";
 this.Padding = new System.Windows.Forms.Padding(7);
 this.Size = new System.Drawing.Size(71, 31);
 this.TabIndex = 1;
 this.Text = "消息条";
 this.Visible = false;
 //给委托添加事件
 this.DoubleClick += new System.EventHandler(this.msgDIV_DoubleClick);
 this.MouseLeave += new System.EventHandler(this.msgDIV_MouseLeave);
 this.MouseHover += new System.EventHandler(this.msgDIV_MouseHover);
 this.timerLable.Interval = 1000;
 this.timerLable.Tick += new System.EventHandler(this.timerLable_Tick);
 }
 #endregion

 #region 将消息条添加到指定容器上
 /// <summary>
 /// 将消息条添加到指定容器上Form
 /// </summary>
 /// <param name="form"></param>
 public void AddToControl(Form form)
 {
 form.Controls.Add(this);
 }
 /// <summary>
 /// 将消息条添加到指定容器上GroupBox
 /// </summary>
 /// <param name="form"></param>
 public void AddToControl(GroupBox groupBox)
 {
 groupBox.Controls.Add(this);
 }
 /// <summary>
 /// 将消息条添加到指定容器上Panel
 /// </summary>
 /// <param name="form"></param>
 public void AddToControl(Panel panel)
 {
 panel.Controls.Add(this);
 }
 #endregion

 //---------------------------------------------------------------------------
 #region 消息显示 的相关参数们 hiddenClick,countNumber,constCountNumber
 /// <summary>
 /// 当前显示了多久的秒钟数
 /// </summary>
 int hiddenClick = 0;
 /// <summary>
 /// 要显示多久的秒钟数 可变参数
 /// </summary>
 int countNumber = 3;
 /// <summary>
 /// 要显示多久的秒钟数 固定参数
 /// </summary>
 int constCountNumber = 3; 
 #endregion

 #region 计时器 显示countNumber秒钟后自动隐藏div -timerLable_Tick(object sender, EventArgs e)
 private void timerLable_Tick(object sender, EventArgs e)
 {
 if (hiddenClick > countNumber - 2)
 {
 MsgDivHidden();
 }
 else
 {
 hiddenClick++;
 //RemainCount();
 }
 } 
 #endregion

 #region 隐藏消息框 并停止计时 +void MsgDivHidden()
 /// <summary>
 /// 隐藏消息框 并停止计时
 /// </summary>
 public void MsgDivHidden()
 {
 this.Text = "";
 this.Visible = false;
 this.hiddenClick = 0;
 //this.tslblRemainSecond.Text = "";
 if (this.timerLable.Enabled == true)
 this.timerLable.Stop();

 //调用 委托 然后清空委托
 if (dgCallBack != null && dgCallBack.GetInvocationList().Length > 0)
 {
 dgCallBack();
 dgCallBack -= dgCallBack;
 }
 } 
 #endregion

 #region 在消息框中显示消息字符串 +void MsgDivShow(string msg)
 /// <summary>
 /// 在消息框中显示消息字符串
 /// </summary>
 /// <param name="msg">要显示的字符串</param>
 public void MsgDivShow(string msg)
 {
 this.Text = msg;
 this.Visible = true;
 this.countNumber = constCountNumber;//默认设置显示秒数为10;
 this.hiddenClick = 0;//重置倒数描述
 this.timerLable.Start();
 } 
 #endregion

 #region 在消息框中显示消息字符串 并在消息消失时 调用回调函数 +void MsgDivShow(string msg, DGMsgDiv callback)
 /// <summary>
 /// 在消息框中显示消息字符串 并在消息消失时 调用回调函数
 /// </summary>
 /// <param name="msg">要显示的字符串</param>
 /// <param name="callback">回调函数</param>
 public void MsgDivShow(string msg, DGMsgDiv callback)
 {
 MsgDivShow(msg);
 dgCallBack = callback;
 }
 #endregion

 #region 在消息框中显示消息字符串 并在指定时间消息消失时 调用回调函数 +void MsgDivShow(string msg, int seconds, DGMsgDiv callback)
 /// <summary>
 /// 在消息框中显示消息字符串 并在消息消失时 调用回调函数
 /// </summary>
 /// <param name="msg">要显示的字符串</param>
 /// <param name="seconds">消息显示时间</param>
 /// <param name="callback">回调函数</param>
 public void MsgDivShow(string msg, int seconds, DGMsgDiv callback)
 {
 MsgDivShow(msg, seconds);
 dgCallBack = callback;
 } 
 #endregion

 #region 在消息框中显示消息字符串,并指定消息框显示秒数 +void MsgDivShow(string msg, int seconds)
 /// <summary>
 /// 在消息框中显示消息字符串,并指定消息框显示秒数
 /// </summary>
 /// <param name="msg">要显示的字符串</param>
 /// <param name="seconds">消息框显示秒数</param>
 public void MsgDivShow(string msg, int seconds)
 {
 this.Text = msg;
 this.Visible = true;
 this.countNumber = seconds;
 this.hiddenClick = 0;//重置倒数描述
 this.timerLable.Start();
 } 
 #endregion

 //---------------------------------------------------------------------------
 #region 事件们~~~! msgDIV_MouseHover,msgDIV_MouseLeave,msgDIV_DoubleClick
 //当鼠标停留在div上时 停止计时
 private void msgDIV_MouseHover(object sender, EventArgs e)
 {
 if (this.timerLable.Enabled == true)
 this.timerLable.Stop();
 }
 //当鼠标从div上移开时 继续及时
 private void msgDIV_MouseLeave(object sender, EventArgs e)
 {
 //当消息框正在显示、回复框没显示、计时器正停止的时候,重新启动计时器
 if (this.Visible == true && this.timerLable.Enabled == false)
 this.timerLable.Start();
 }
 //双击消息框时关闭消息框
 private void msgDIV_DoubleClick(object sender, EventArgs e)
 {
 MsgDivHidden();
 } 
 #endregion

}