C#实现Dev Grid拖拽移动行的方法

 更新时间:2020年6月25日 11:30  点击:1507

本文实例讲述了C#实现Dev Grid拖拽移动行的方法。分享给大家供大家参考。具体如下:

完整实例代码点击此处本站下载。
   
拖拽时带行截图效果

实现代码如下:

/// <summary>
/// 拖拽帮助类
/// </summary>
public static class DragHelper
{
  /// <summary>
  /// BandedGridView 拖拽
  /// </summary>
  /// <param name="gvMain"></param>
  public static void DragGridRow<T>(this BandedGridView gvMain)
  {
   // 拖拽遮罩控件
   DragMaster dragMaster = new DragMaster();
   // 当前拖拽行绘画区域
   Rectangle _DragRowRect = Rectangle.Empty;
   GridControl gcMain = gvMain.GridControl;
   GridHitInfo _DownHitInfo = null;
   //表格属性 允许拖拽
   gcMain.AllowDrop = true;
   gvMain.OptionsDetail.EnableMasterViewMode = false;
   #region 将对象拖至边界时发生 DragOver
   gcMain.DragOver += delegate(object sender, System.Windows.Forms.DragEventArgs e)
   {
    if (e.Data.GetDataPresent(typeof(T)))
     e.Effect = DragDropEffects.Move;
    else
     e.Effect = DragDropEffects.None;
   };
   #endregion
   #region 拖拽完成时处理数据 DragDrop
   gcMain.DragDrop += delegate(object sender, System.Windows.Forms.DragEventArgs e)
   {
    // 拖过来的新数据
    T newRow = (T)e.Data.GetData(typeof(T));
    // 原来在此坐标的数据
    // e的坐标是相对于屏幕的
    var clientPoint = gcMain.PointToClient(new Point(e.X, e.Y));
    GridHitInfo hitInfo = gvMain.CalcHitInfo(new Point(clientPoint.X, clientPoint.Y));
    var oldRow = (T)gvMain.GetRow(hitInfo.RowHandle);
    // 如果相等则不处理
    if (oldRow == null || newRow == null) return;
    // 且目标位置不是最后一行的话要将所有序号重排
    // 原来的行号
    var oldIndex = _DownHitInfo.RowHandle;
    // 新的行号
    var newIndex = hitInfo.RowHandle;
    BindingSource bs = (BindingSource)(gcMain.DataSource);
    if (bs == null)
     return;
    bs.RemoveAt(oldIndex);
    bs.Insert(oldIndex, oldRow);
    bs.RemoveAt(newIndex);
    bs.Insert(newIndex, newRow);
    bs.ResetBindings(false);
   };
   #endregion
   #region 鼠标按下 MouseDown
   gcMain.MouseDown += delegate(object sender, MouseEventArgs e)
   {
    _DownHitInfo = null;
    GridHitInfo hitInfo = gvMain.CalcHitInfo(new Point(e.X, e.Y));
    if (Control.ModifierKeys != Keys.None) return;
    if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)
    {
     // 禁用的Grid不支持拖拽
     if (!gvMain.OptionsBehavior.Editable
      || gvMain.OptionsBehavior.ReadOnly)
      return;
     // 只有点击最前面才能拖拽
     if (hitInfo.InRowCell)
      return;
     // 缓存
     _DownHitInfo = hitInfo;
    }
   };
   #endregion
   #region 鼠标移动 MouseMove
   gcMain.MouseMove += delegate(object sender, MouseEventArgs e)
   {
    if (e.Button == MouseButtons.Left)
    {
     if (_DownHitInfo != null)
     {
      Size dragSize = SystemInformation.DragSize;
      // 偏离区域
      Rectangle dragRect = new Rectangle(new Point(_DownHitInfo.HitPoint.X - dragSize.Width / 2, _DownHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
      if (!dragRect.Contains(new Point(e.X, e.Y)))
      {
       // 屏幕坐标
       var p = gcMain.PointToScreen(e.Location);
       // 刷新是必须要的
       gcMain.Refresh();
       // 获取当前行截图
       var bmp = GetDragRowImage(gcMain, _DownHitInfo, _DragRowRect);
       Point offSetPoint = new Point(p.X + 1, p.Y - dragMaster.DragSize.Height / 2);
       // 开始显示拖拽遮罩
       dragMaster.StartDrag(bmp, offSetPoint, DragDropEffects.Move);
       // 获取要拖拽的数据
       object row = gvMain.GetRow(_DownHitInfo.RowHandle);
       // 开始拖拽
       gcMain.DoDragDrop(row, DragDropEffects.Move);
       // 取消事件
       DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
       // 清空缓存
       _DownHitInfo = null;
      }
     }
    }
   };
   #endregion
   #region 在用鼠标拖动某项时发生,是否允许继续拖放 QueryContinueDrag
   gcMain.QueryContinueDrag += delegate(object sender, QueryContinueDragEventArgs e)
   {
    switch (e.Action)
    {
     case DragAction.Continue:
      // 移动遮罩
      Point offSetPoint = new Point(Cursor.Position.X + 1, Cursor.Position.Y - dragMaster.DragSize.Height / 2);
      dragMaster.DoDrag(offSetPoint, DragDropEffects.Move, false);
      break;
     default:
      // 清空
      _DragRowRect = Rectangle.Empty;
      // 停止拖动
      dragMaster.EndDrag();
      break;
    }
   };
   #endregion
   #region 点击行头移动行
   gvMain.CustomDrawRowIndicator += delegate(object sender, RowIndicatorCustomDrawEventArgs e)
   {
    if (_DragRowRect == Rectangle.Empty && _DownHitInfo != null && _DownHitInfo.RowHandle == e.RowHandle)
    {
     _DragRowRect = e.Bounds;
    }
   };
   #endregion
  }
  /// <summary>
  /// GridView 拖拽
  /// </summary>
  /// <param name="gvMain"></param>
  public static void DragGridRow<T>(this GridView gvMain)
  {
   // 拖拽遮罩控件
   DragMaster dragMaster = new DragMaster();
   // 当前拖拽行绘画区域
   Rectangle _DragRowRect = Rectangle.Empty;
   GridControl gcMain = gvMain.GridControl;
   GridHitInfo _DownHitInfo = null;
   //表格属性 允许拖拽
   gcMain.AllowDrop = true;
   gvMain.OptionsDetail.EnableMasterViewMode = false;
   #region 将对象拖至边界时发生 DragOver
   gcMain.DragOver += delegate(object sender, System.Windows.Forms.DragEventArgs e)
   {
    if (e.Data.GetDataPresent(typeof(T)))
     e.Effect = DragDropEffects.Move;
    else
     e.Effect = DragDropEffects.None;
   };
   #endregion
   #region 拖拽完成时处理数据 DragDrop
   gcMain.DragDrop += delegate(object sender, System.Windows.Forms.DragEventArgs e)
   {
    // 拖过来的新数据
    T newRow = (T)e.Data.GetData(typeof(T));
    // 原来在此坐标的数据
    // e的坐标是相对于屏幕的
    var clientPoint = gcMain.PointToClient(new Point(e.X, e.Y));
    GridHitInfo hitInfo = gvMain.CalcHitInfo(new Point(clientPoint.X, clientPoint.Y));
    var oldRow = (T)gvMain.GetRow(hitInfo.RowHandle);
    // 如果相等则不处理
    if (oldRow == null || newRow == null) return;
    // 且目标位置不是最后一行的话要将所有序号重排
    // 原来的行号
    var oldIndex = _DownHitInfo.RowHandle;
    // 新的行号
    var newIndex = hitInfo.RowHandle;
      BindingSource bs = (BindingSource)(gcMain.DataSource);
    if (bs == null)
     return;
      bs.RemoveAt(oldIndex);
    bs.Insert(oldIndex, oldRow);
    bs.RemoveAt(newIndex);
    bs.Insert(newIndex, newRow);
    bs.ResetBindings(false);
   };
   #endregion
   #region 鼠标按下 MouseDown
   gcMain.MouseDown += delegate(object sender, MouseEventArgs e)
   {
    _DownHitInfo = null;
    GridHitInfo hitInfo = gvMain.CalcHitInfo(new Point(e.X, e.Y));
    if (Control.ModifierKeys != Keys.None) return;
    if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)
    {
     // 禁用的Grid不支持拖拽
     if (!gvMain.OptionsBehavior.Editable
      || gvMain.OptionsBehavior.ReadOnly)
      return;
     // 只有点击最前面才能拖拽
     if (hitInfo.InRowCell)
      return;
     // 缓存
     _DownHitInfo = hitInfo;
    }
   };
   #endregion
   #region 鼠标移动 MouseMove
   gcMain.MouseMove += delegate(object sender, MouseEventArgs e)
   {
    if (e.Button == MouseButtons.Left)
    {
     if (_DownHitInfo != null)
     {
      Size dragSize = SystemInformation.DragSize;
      // 偏离区域
      Rectangle dragRect = new Rectangle(new Point(_DownHitInfo.HitPoint.X - dragSize.Width / 2, _DownHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
        if (!dragRect.Contains(new Point(e.X, e.Y)))
      {
       // 屏幕坐标
       var p = gcMain.PointToScreen(e.Location);
       // 刷新是必须要的
       gcMain.Refresh();
       // 获取当前行截图
       var bmp = GetDragRowImage(gcMain, _DownHitInfo, _DragRowRect);
       Point offSetPoint = new Point(p.X + 1, p.Y - dragMaster.DragSize.Height / 2);
       // 开始显示拖拽遮罩
       dragMaster.StartDrag(bmp, offSetPoint, DragDropEffects.Move);
       // 获取要拖拽的数据
       object row = gvMain.GetRow(_DownHitInfo.RowHandle);
       // 开始拖拽
       gcMain.DoDragDrop(row, DragDropEffects.Move);
       // 取消事件
       DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
       // 清空缓存
       _DownHitInfo = null;
      }
     }
    }
   };
   #endregion
   #region 在用鼠标拖动某项时发生,是否允许继续拖放 QueryContinueDrag
   gcMain.QueryContinueDrag += delegate(object sender, QueryContinueDragEventArgs e)
   {
    switch (e.Action)
    {
     case DragAction.Continue:
      // 移动遮罩
      Point offSetPoint = new Point(Cursor.Position.X + 1, Cursor.Position.Y - dragMaster.DragSize.Height / 2);
      dragMaster.DoDrag(offSetPoint, DragDropEffects.Move, false);
      break;
     default:
      // 清空
      _DragRowRect = Rectangle.Empty;
      // 停止拖动
      dragMaster.EndDrag();
      break;
    }
   };
   #endregion
   #region 点击行头移动行
   gvMain.CustomDrawRowIndicator += delegate(object sender, RowIndicatorCustomDrawEventArgs e)
   {
    if (_DragRowRect == Rectangle.Empty && _DownHitInfo != null && _DownHitInfo.RowHandle == e.RowHandle)
    {
     _DragRowRect = e.Bounds;
    }
   };
   #endregion
   }
  /// <summary>
  /// 获取拖拽截图
  /// </summary>
  /// <param name="hitInfo"></param>
  /// <param name="gcMain"></param>
  /// <param name="dragRowRect"></param>
  /// <returns></returns>
  private static Bitmap GetDragRowImage(GridControl gcMain, GridHitInfo hitInfo, Rectangle dragRowRect)
  {
   // 截图
   var bmp = DevImageCapturer.GetControlBitmap(gcMain, null
   , dragRowRect.Width + 1, dragRowRect.Top
   , gcMain.Width - dragRowRect.Width - 4, dragRowRect.Height - 1);
     using (Graphics g = Graphics.FromImage(bmp))
   {
    var p1 = new Point(1, 1);
    var p2 = new Point(bmp.Width - 1, 1);
    var p3 = new Point(1, bmp.Height - 2);
    var p4 = new Point(bmp.Width - 1, bmp.Height - 2);
    using (Pen pen = new Pen(gcMain.ForeColor))
    {
     g.DrawLine(pen, p1, p2);
     g.DrawLine(pen, p1, p3);
     g.DrawLine(pen, p2, p4);
     g.DrawLine(pen, p3, p4);
    }
   }
   return bmp;
  }
}
/// <summary>
/// 拖拽窗口
/// </summary>
public partial class DragWindow : DevExpress.Utils.Win.TopFormBase
{
  private Bitmap dragBitmap;
  private bool dragging;
  private Point hotSpot;
  public static readonly Point InvisiblePoint = new Point(-100000, -100000);
  public DragWindow()
  {
   hotSpot = Point.Empty;
   dragging = false;
   SetStyle(ControlStyles.Selectable, false);
   this.Size = Size.Empty;
   this.ShowInTaskbar = false;
   Form prevActive = Form.ActiveForm;
   InitializeComponent();
  }
  void ActivateForm(object sender, EventArgs e)
  {
   Form form = sender as Form;
   if (form == null || !form.IsHandleCreated) return;
   form.Activate();
  }
  public void MakeTopMost()
  {
   UpdateZOrder();
  }
  private void InitializeComponent()
  {
   this.StartPosition = FormStartPosition.Manual;
   dragBitmap = null;
   this.Enabled = false;
   this.MinimumSize = Size.Empty;
   this.Size = Size.Empty;
   this.Location = InvisiblePoint;
   this.Visible = false;
   this.TabStop = false;
   //this.Opacity = 0.7;// DevExpress.Utils.DragDrop.DragWindow.DefaultOpacity;
  }
  protected void InternalMoveBitmap(Point p)
  {
   //p.Offset(-hotSpot.X, -hotSpot.Y);
   this.SuspendLayout();
   this.Location = p;
   this.ResumeLayout();
  }
  protected override void OnResize(System.EventArgs e)
  {
   base.OnResize(e);
  }
  public bool ShowDrag(Point p)
  {
   if (this.BackgroundImage == null) return false;
   dragging = true;
   Visible = true;
   Refresh();
   InternalMoveBitmap(p);
   return true;
  }
  public bool MoveDrag(Point p)
  {
   if (!dragging) return false;
   InternalMoveBitmap(p);
   return true;
  }
  public bool HideDrag()
  {
   if (!dragging) return false;
   Visible = false;
   BackgroundImage = null;
   dragging = false;
   this.SuspendLayout();
   this.Size = Size.Empty;
   this.Location = InvisiblePoint;
   this.ResumeLayout();
   return true;
  }
  public Point HotSpot { get { return hotSpot; } set { hotSpot = value; } }
  public Bitmap DragBitmap
  {
   get { return dragBitmap; }
   set
   {
    this.BackgroundImage = value;
    if (value == null)
    {
     HideDrag();
    }
    else
     hotSpot = new Point(value.Size.Width / 2, value.Size.Height / 2);
    dragBitmap = value;
    Size = BackgroundImage.Size;
   }
  }
}
/// <summary>
/// 截图
/// </summary>
public class DevImageCapturer
{
  [System.Runtime.InteropServices.DllImport("USER32.dll")]
  internal static extern IntPtr GetDC(IntPtr dc);
  [System.Runtime.InteropServices.DllImport("USER32.dll")]
  internal static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
  [System.Runtime.InteropServices.DllImport("USER32.dll")]
  internal static extern IntPtr GetDesktopWindow();
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern IntPtr CreateCompatibleDC(IntPtr hdc);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern bool DeleteObject(IntPtr hObject);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern IntPtr SelectObject(IntPtr hdc, IntPtr obj);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern IntPtr CreateSolidBrush(int color);
  [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  internal static extern IntPtr CreatePatternBrush(IntPtr hBitmap);
  /// <summary>
  /// 获取控件的截图
  /// </summary>
  /// <param name="control">控件</param>
  /// <param name="pattern">图片</param>
  /// <returns></returns>
  public static Bitmap GetControlBitmap(Control control, Bitmap pattern)
  {
   int width = control.Width;
   int height = control.Height;
   if (control is Form)
   {
    width = control.ClientRectangle.Width;
    height = control.ClientRectangle.Height;
   }
   IntPtr hdc = GetDC(control.Handle);
   IntPtr compDC = CreateCompatibleDC(hdc);
   IntPtr compHBmp = CreateCompatibleBitmap(hdc, width, height);
   IntPtr prev = SelectObject(compDC, compHBmp);
   IntPtr brush = IntPtr.Zero, prevBrush = IntPtr.Zero;
   if (pattern != null)
   {
    brush = CreatePatternBrush(pattern.GetHbitmap());
    prevBrush = SelectObject(compDC, brush);
   }
   Point pt = new Point(0, 0);
   BitBlt(compDC, 0, 0, width, height, hdc, pt.X, pt.Y, 0x00C000CA);
   SelectObject(compDC, prev);
   if (prevBrush != IntPtr.Zero)
    SelectObject(compDC, prevBrush);
   ReleaseDC(control.Handle, hdc);
   NativeMethods.DeleteDC(compDC);
   Bitmap bmp = Bitmap.FromHbitmap(compHBmp);
   DeleteObject(compHBmp);
   if (brush != IntPtr.Zero)
    DeleteObject(brush);
   return bmp;
  }
  /// <summary>
  /// 获取控件的截图
  /// </summary>
  /// <param name="control">控件</param>
  /// <param name="pattern">图片</param>
  /// <param name="offSetX">X</param>
  /// <param name="offSetY">Y</param>
  /// <param name="width">宽</param>
  /// <param name="height">高</param>
  /// <returns></returns>
  public static Bitmap GetControlBitmap(Control control, Bitmap pattern, int offSetX = 0, int offSetY = 0, int width = 0, int height = 0)
  {
   width = width == 0 ? control.Width : width;
   height = height == 0 ? control.Height : height;
   if (control is Form)
   {
    width = control.ClientRectangle.Width;
    height = control.ClientRectangle.Height;
   }
   IntPtr hdc = GetDC(control.Handle);
   IntPtr compDC = CreateCompatibleDC(hdc);
   IntPtr compHBmp = CreateCompatibleBitmap(hdc, width, height);
   IntPtr prev = SelectObject(compDC, compHBmp);
   IntPtr brush = IntPtr.Zero, prevBrush = IntPtr.Zero;
   if (pattern != null)
   {
    brush = CreatePatternBrush(pattern.GetHbitmap());
    prevBrush = SelectObject(compDC, brush);
   }
   Point pt = new Point(offSetX, offSetY);
   BitBlt(compDC, 0, 0, width, height, hdc, pt.X, pt.Y, 0x00C000CA);
   SelectObject(compDC, prev);
   if (prevBrush != IntPtr.Zero)
    SelectObject(compDC, prevBrush);
   ReleaseDC(control.Handle, hdc);
   NativeMethods.DeleteDC(compDC);
   Bitmap bmp = Bitmap.FromHbitmap(compHBmp);
   DeleteObject(compHBmp);
   if (brush != IntPtr.Zero)
    DeleteObject(brush);
   return bmp;
  }
}
 public class DragMaster
 {
  [ThreadStatic]
  static DragWindow dragWindow;
  bool dragInProgress;
  DragDropEffects effects;
  DragDropEffects lastEffect;
  static Cursor customizationCursor = null;
  double _opacity = 0.7;
    public double Opacity
  {
   get { return _opacity; }
   set { _opacity = value; }
  }
  public DragMaster()
  {
   dragInProgress = false;
   lastEffect = effects = DragDropEffects.None;
  }
    DragWindow DragWindow
  {
   get
   {
    if (dragWindow == null) dragWindow = new DragWindow() { Opacity = this.Opacity };
    return dragWindow;
   }
  }
  public DragDropEffects LastEffect
  {
   get { return lastEffect; }
  }
  public bool DragInProgress
  {
   get { return dragInProgress; }
  }
    /// <summary>
  /// 绘制大小
  /// </summary>
  public Size DragSize
  {
   get
   {
    if (DragWindow.DragBitmap == null) return Size.Empty;
    return DragWindow.DragBitmap.Size;
   }
  }
  /// <summary>
  /// 开始拖拽
  /// </summary>
  /// <param name="bmp"></param>
  /// <param name="startPoint"></param>
  /// <param name="effects"></param>
  public void StartDrag(Bitmap bmp, Point startPoint, DragDropEffects effects)
  {
   StopDrag();
   dragInProgress = true;
   this.effects = effects;
   lastEffect = effects;
   DragWindow.MakeTopMost();
   DragWindow.DragBitmap = bmp;
   DragWindow.ShowDrag(startPoint);
   SetDragCursor(effects);
  }
  /// <summary>
  /// 停止拖拽
  /// </summary>
  protected void StopDrag()
  {
   dragInProgress = false;
   lastEffect = effects = DragDropEffects.None;
   DragWindow.HideDrag();
  }
  /// <summary>
  /// 设置拖拽鼠标类型
  /// </summary>
  /// <param name="e"></param>
  public void SetDragCursor(DragDropEffects e)
  {
   if (e == DragDropEffects.None)
    Cursor.Current = CustomizationCursor;
   else
    Cursor.Current = Cursors.Default;
  }
  /// <summary>
  /// 拖拽
  /// </summary>
  /// <param name="p"></param>
  /// <param name="e"></param>
  /// <param name="setCursor"></param>
  public void DoDrag(Point p, DragDropEffects e, bool setCursor)
  {
   if (!dragInProgress) return;
   lastEffect = e;
   if (setCursor) SetDragCursor(e);
   DragWindow.MoveDrag(p);
  }
  /// <summary>
  /// 取消拖拽
  /// </summary>
  public void CancelDrag()
  {
   if (!dragInProgress) return;
   StopDrag();
  }
  /// <summary>
  /// 结束拖拽
  /// </summary>
  public void EndDrag()
  {
   if (!dragInProgress) return;
   StopDrag();
  }
  /// <summary>
  /// 自定义Cursor
  /// </summary>
  static Cursor CustomizationCursor
  {
   get
   {
    if (customizationCursor == null) customizationCursor = ResourceImageHelper.CreateCursorFromResources("DevExpress.XtraTreeList.Images.customization.cur", typeof(DragMaster).Assembly);
    return customizationCursor;
   }
  }
}

希望本文所述对大家的C#程序设计有所帮助。

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25