StableVersion4.3/HL_FristAidPlatform_Public/Form/UGridControl.cs

181 lines
5.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace HL_FristAidPlatform_Public
{
public class UGridControl : DevExpress.XtraGrid.GridControl
{
private GridView gridView = null;
private Point m_mouseDownLocation;
private int m_dragHandle;
private DragForm m_dragRowShadow;
/// <summary>
///
/// </summary>
/// <param name="ev"></param>
protected override void OnMouseDown(MouseEventArgs ev)
{
if (ev.Button == MouseButtons.Left)
{
if (gridView == null)
{
gridView = ((GridView)base.MainView);
}
var _hit = gridView.CalcHitInfo(ev.Location);
if (_hit.RowHandle >= 0)
{
m_dragHandle = _hit.RowHandle;
m_mouseDownLocation = ev.Location;
}
else
{
m_dragHandle = -1;
}
}
base.OnMouseDown(ev);
}
/// <summary>
///
/// </summary>
/// <param name="ev"></param>
protected override void OnMouseMove(MouseEventArgs ev)
{
if (ev.Button == MouseButtons.Left && m_dragHandle >= 0)
{
if (m_dragRowShadow == null)
{
double _x2 = Math.Pow((ev.Location.X - m_mouseDownLocation.X), 2);
double _y2 = Math.Pow((ev.Location.Y - m_mouseDownLocation.Y), 2);
double _d2 = Math.Sqrt(_x2 + _y2);
if (_d2 > 3)
{
//执行拖拽;
this.BeginDrag(m_dragHandle);
//var _info = (DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo)gv22.GetViewInfo();
//_info.GetGridRowInfo(0).CalcRectangle
}
}
else
{
m_dragRowShadow.Location = new Point(m_dragRowShadow.Location.X, this.PointToScreen(ev.Location).Y);
}
}
base.OnMouseMove(ev);
}
/// <summary>
///
/// </summary>
/// <param name="ev"></param>
protected override void OnMouseUp(MouseEventArgs ev)
{
if (m_dragRowShadow != null)
{
var _hit = gridView.CalcHitInfo(ev.Location);
this.EndDrag(_hit.RowHandle);
}
base.OnMouseUp(ev);
}
private void BeginDrag(int _handle)
{
try
{
var _info = (DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo)gridView.GetViewInfo();
//_info.GetGridRowInfo(0).CalcRectangle
Rectangle _bound = _info.GetGridRowInfo(_handle).Bounds;
_bound.Location = this.PointToScreen(_bound.Location);
m_dragRowShadow = new HL_FristAidPlatform_Public.DragForm(_bound);
m_dragRowShadow.Show();
}
catch
{
}
}
private void EndDrag(int _handle)
{
if (m_dragRowShadow != null)
{
m_dragRowShadow.Close();
m_dragRowShadow.Dispose();
m_dragRowShadow = null;
int _rowIndex = gridView.GetDataSourceRowIndex(m_dragHandle);
DataRow _row = ((DataTable)this.DataSource).Rows[_rowIndex];
object[] _values = _row.ItemArray;
base.BeginUpdate();
//移除目标行;
((DataTable)this.DataSource).Rows.RemoveAt(m_dragHandle);
_row = ((DataTable)this.DataSource).NewRow();
_row.ItemArray = _values;
if (_handle >= 0)
{
//插入指定位置;
((DataTable)this.DataSource).Rows.InsertAt(_row, _handle);
gridView.FocusedRowHandle = _handle;
}
else
{
//添加;
((DataTable)this.DataSource).Rows.Add(_row);
gridView.FocusedRowHandle = gridView.RowCount - 1;
}
base.EndUpdate();
}
}
}
/// <summary>
///
/// </summary>
public class DragForm : DevExpress.Utils.Win.TopFormBase
{
private Bitmap m_buff;
private Graphics m_buffG;
/// <summary>
///
/// </summary>
/// <param name="_size"></param>
public DragForm(Rectangle _bound)
{
this.Text = "";
this.FormBorderStyle = FormBorderStyle.None;
this.ControlBox = false;
this.Size = _bound.Size;
this.ShowInTaskbar = false;
this.StartPosition = FormStartPosition.Manual;
this.Opacity = 0.8d; //TopFormBase已经有默认值了
m_buff = new Bitmap(_bound.Width, _bound.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
m_buffG = Graphics.FromImage(m_buff);
m_buffG.CopyFromScreen(_bound.Location, new Point(0, 0), _bound.Size);
this.BackgroundImageLayout = ImageLayout.None;
this.BackgroundImage = m_buff;
this.Location = _bound.Location;
}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// e.Graphics.DrawImage(m_buff, 0, 0);
}
}
}