Telerik 控件事例(鼠标拖动行,拖动列,设置行对齐,行宽,是否显示)

简介: People.cs   using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.

People.cs

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace RadGridViewControl
{
  public class People
  {
    public Guid Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Sex { get; set; }

    public string Tel { get; set; }

    public string Address { get; set; }

    public DateTime BirthDay { get; set; }

    public string Note { get; set; }

    public string Like { get; set; }

    public string Work { get; set; }


    public List<People> Init()
    {
      var list = new List<People>();
      for (int i = 0; i < 20; i++)
      {
        var people = new People
        {
          Id = Guid.NewGuid(),
          FirstName = "王",
          LastName = "友",
          Sex = "男",
          Tel = "15209893158",
          Address = "安徽省合肥市高新区",
          BirthDay = DateTime.Now,
          Note = "大家好我是王友",
          Like = "我喜欢编程",
          Work = "其实我是一名程序员"
        };
        list.Add(people);

      }
    return list;
  }


  public DataTable Data()
  {
    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("FirstName");
    dt.Columns.Add("LastName");
    dt.Columns.Add("Sex");
    dt.Columns.Add("Tel");
    dt.Columns.Add("Address");
    dt.Columns.Add("BirthDay");
    dt.Columns.Add("Note");
    dt.Columns.Add("Like");
    dt.Columns.Add("Work");
    for (int i = 0; i < 20; i++)
    {
      DataRow dr = dt.NewRow();
      dr["Id"] = i;
      dr["FirstName"] = "王";
      dr["LastName"] = "友"+i;
      dr["Sex"] = "男";
      dr["Tel"] = "1520989315"+i;
      dr["Address"] = "安徽省合肥市高新区";
      dr["BirthDay"] = DateTime.Now.AddDays(i);
      dr["Note"] = "大家好我是王友"+i;
      dr["Like"] = "我喜欢编程";
      dr["Work"] = "其实我是一名程序员";
      dt.Rows.Add(dr);
    }
    return dt;
    }
  }
}

 

 

RadGridViewUserControl.cs

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;
using Telerik.WinControls.UI.Localization;
using System.Xml;

namespace RadGridViewControl
{
  public partial class RadGridViewUserControl : UserControl
  {
    /// <summary>
    /// 数据源
    /// </summary>
    public DataTable Data;

    private DataTable DataTableList { get; set; }

    /// <summary>
    /// 构造函数
    /// </summary>
    public RadGridViewUserControl()
    {
      InitializeComponent();
    }

    /// <summary>
    /// 构造函数2
    /// </summary>
    /// <param name="xmlName">xml文件路径+名称</param>
    public RadGridViewUserControl(string xmlName)
    {
      InitializeComponent();
      _xmlName = xmlName;
    }

    #region 定义的接口

    /// <summary>
    /// 定义xml文件
    /// </summary>
    public string Xml { get; set; }

    /// <summary>
    /// xml文件路径+名称
    /// </summary>
    public List<SelectColumn> ReadXml()
    {
      List<SelectColumn> selectColumns = new List<SelectColumn>();
      XmlDataDocument doc = new XmlDataDocument();
      try
      {
        doc.Load(Xml);

        XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
        XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
        if (null == dataCellsNode) return null;
        XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

        foreach (XmlNode node in dataCellNode)
        {
          SelectColumn selectColumn = new SelectColumn();
          selectColumn.ColumnName = node.SelectSingleNode("cell_name").InnerText;
          selectColumn.ChineseColumnName = node.SelectSingleNode("chinese_name").InnerText;
          selectColumn.IsVisible = bool.Parse(node.SelectSingleNode("visible").InnerText);
          selectColumn.Width = int.Parse(node.SelectSingleNode("width").InnerText);
          selectColumn.Align = int.Parse(node.SelectSingleNode("align").InnerText);
          selectColumn.ShowIndex = int.Parse(node.SelectSingleNode("show_index").InnerText);
          selectColumns.Add(selectColumn);
        }
      }
    catch (Exception ex)
    {

    }
    return selectColumns;
  }

  /// <summary>
  /// 获取选中的数据
  /// </summary>
  /// <param name="indexList">获取选中的行</param>
  /// <returns></returns>
  public List<GridViewRowInfo> GetSelData(ref List<string> indexList)
  {
    var listRows = new List<GridViewRowInfo>();
    foreach (var row in rgv_Control.Rows)
    {
      var value = row.Cells["ChkSelect"].Value.ToString();
      var index = row.Cells["Num"].Value.ToString();
      if (!value.Equals("True")) continue;
      indexList.Add(index);
      listRows.Add(row);
    }
    return listRows;
  }

  /// <summary>
  /// 初始化用户控件
  /// </summary>
  public void RadGridViewControl_Init(DataTable dataTable)
  {
    DataTableList = dataTable;
    SetRadGridViewProperty();
    AddTwoColumn();
    BindRadGridViewControl(dataTable);
    WrapText();
    SetColumnReadOnly();

    RadGridLocalizationProvider.CurrentProvider = new ChineseRadGridLocalizationProvider();
    rgv_Control.Rows.CollectionChanged += Rows_CollectionChanged;
    SetRadGridViewForXml();
  }

  /// <summary>
  /// 通过XML设置RadGridView控件
  /// </summary>
  private void SetRadGridViewForXml()
  {
    var list = ReadXml();
    SetColumnWidth(list);
    ConvertColumnNameToChinese(list);
    ShowColumnName(list);
    SetColumnAlign(list);
    ShowColumnIndex(list);
  }

  /// <summary>
  /// 获取拖动后的数据记录
  /// </summary>
  /// <returns></returns>
  public DataTable GetAllGridViewData()
  {
    var dt = new DataTable();
    foreach (var column in rgv_Control.Columns)
    {
      var dataColumn = new DataColumn
      {
        ColumnName = column.Name
      };
      if (!(column.Name.Equals("Num") || column.Name.Equals("ChkSelect")))
      {
        dt.Columns.Add(dataColumn);
      }
    }
    foreach (GridViewRowInfo t in rgv_Control.Rows)
    {
      var datarow = dt.NewRow();
      for (var j = 0; j < dt.Columns.Count; j++)
      {
        datarow[dt.Columns[j].ColumnName] = t.Cells[dt.Columns[j].ColumnName].Value;
      }
      dt.Rows.Add(datarow);
    }
    return dt;
    }

  /// <summary>
  /// 获取按钮的句柄
  /// </summary>
  /// <returns></returns>
  public IntPtr getBtHandler()
  {
    return this.btn_Select.Handle;
  }
  #endregion

  /// <summary>
  /// 如果像这样写分组的话那我要累死
  /// </summary>
  public bool EnableGrouping
  {
    get { return rgv_Control.EnableGrouping; }
    set { rgv_Control.EnableGrouping = value; }
  }

  /// <summary>
  /// 设置RadGridView控件属性
  /// </summary>
  private void SetRadGridViewProperty()
  {
    rgv_Control.EnableGrouping = false;//去掉分组
    rgv_Control.AllowDrop = true;
    rgv_Control.AllowRowReorder = true;
    rgv_Control.AddNewRowPosition = SystemRowPosition.Bottom;
    rgv_Control.ShowRowHeaderColumn = false;
    rgv_Control.AutoSizeRows = true;
    rgv_Control.AllowAddNewRow = false;
  }

  /// <summary>
  /// 添加两个特殊列
  /// </summary>
  private void AddTwoColumn()
  {
    var numColumn = new GridViewDecimalColumn(typeof(int), "Num", "Num")
    {
      HeaderText = "序 号",
      Width = 50,
      ReadOnly = true,
      IsPinned = true
    };
    rgv_Control.Columns.Add(numColumn);

    var chkColumn = new GridViewCheckBoxColumn("ChkSelect", "ChkSelect")
    {
      HeaderText = "选 择",
      Width = 50,
      IsPinned = true
    };
    rgv_Control.Columns.Add(chkColumn);
  }

  /// <summary>
  /// 设置表格只读
  /// </summary>
  private void SetColumnReadOnly()
  {
    for (var i = 0; i < rgv_Control.Columns.Count; i++)
    {
      rgv_Control.Columns[i].ReadOnly = true;
    }
    rgv_Control.Columns["ChkSelect"].ReadOnly = false;
  }

  /// <summary>
  /// 显示列顺序
  /// </summary>
  /// <param name="list"></param>
  private void ShowColumnIndex(IEnumerable<SelectColumn> list)
  {
    foreach (var i in list)
    {
      SelectColumn selectColumn = i;
      foreach (var column in rgv_Control.Columns.Where(column => !column.Name.Equals("Num") && !column.Name.Equals("ChkSelect")).Where(column => selectColumn.ColumnName.Equals(column.Name)))
      {
        var oldIndex = column.Index;
        var newIndex = i.ShowIndex;
        if (oldIndex > newIndex)
        {
          rgv_Control.Columns.Move(oldIndex, newIndex);
          rgv_Control.Columns.Move(newIndex + 1, oldIndex);
        }
        else if (oldIndex < newIndex)
        {
          rgv_Control.Columns.Move(oldIndex, newIndex);
          rgv_Control.Columns.Move(newIndex - 1, oldIndex);
        }
        break;
      }
    }
  }

  /// <summary>
  /// 设置列宽度
  /// </summary>
  private void SetColumnWidth(IEnumerable<SelectColumn> list)
  {
    foreach (var i in list)
    {
      rgv_Control.Columns[i.ColumnName].Width = i.Width;
    }
  }

  /// <summary>
  /// 将列名转化成中文
  /// </summary>
  public void ConvertColumnNameToChinese(List<SelectColumn> list)
  {
    foreach (var i in list)
    {
      rgv_Control.Columns[i.ColumnName].HeaderText = i.ChineseColumnName;
    }
  }

  /// <summary>
  /// Data中,是否显示列名称
  /// </summary>
  public void ShowColumnName(List<SelectColumn> list)
  {
    foreach (var i in list)
    {
      rgv_Control.Columns[i.ColumnName].IsVisible = i.IsVisible;
    }
  }

  /// <summary>
  /// 设置列对齐
  /// </summary>
  public void SetColumnAlign(List<SelectColumn> list)
  {
    foreach (var i in list)
    {
      switch (i.Align)
      {
        case 0:
        rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleCenter;
        break;
        case 1:
        rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleLeft;
        break;
        case 3:
        rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleRight;
        break;
        default:
        break;
      }
    }
  }

  /// <summary>
  /// 点击列选择按钮
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_Select_Click(object sender, EventArgs e)
  {
    var selectColumnForm = new SelectColumnForm(Xml);
    selectColumnForm.ShowDialog();
    if (selectColumnForm.DialogResult == DialogResult.OK)
    {
      SetRadGridViewForXml();
    }
  }

  /// <summary>
  /// 设置右键菜单
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void rgv_Control_ContextMenuOpening(object sender, Telerik.WinControls.UI.ContextMenuOpeningEventArgs e)
  {
    for (var i = 0; i < e.ContextMenu.Items.Count; i++)
    {
      var contextMenuText = e.ContextMenu.Items[i].Text;

      switch (contextMenuText)
      {
        case "条件格式":
        e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
        e.ContextMenu.Items[i + 1].Visibility = ElementVisibility.Collapsed;
        break;
        case "隐 藏":
        e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
        break;
        case "锁定状态":
        e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
        break;
        case "自适应列宽":
        e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
        break;
        case "列选择":
        e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
        break;
      }
    }
  }

  /// <summary>
  /// 设置换行
  /// </summary>
  public void WrapText()
  {
    foreach (var obj in rgv_Control.Columns)
    {
      obj.WrapText = true;
    }
  }

  /// <summary>
  /// RadGridView控件绑定数据
  /// </summary>
  /// <param name="dt"></param>
  public void BindRadGridViewControl(DataTable dt)
  {
    var num = 0;
    foreach (var newColumn in from object column in dt.Columns select new GridViewTextBoxColumn(column.ToString(), column.ToString()))
    {
      rgv_Control.Columns.Add(newColumn);
    }
    for (var i = 0; i < dt.Rows.Count; i++)
    {
      var cellcount = 0;
      var listRow = new object[dt.Rows.Count + 2];
      listRow[cellcount++] = ++num;
      listRow[cellcount++] = false;
      for (var j = 0; j < dt.Columns.Count; j++)
      {
        listRow[cellcount++] = dt.Rows[i][j];
      }
      rgv_Control.Rows.Add(listRow);
    }
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void Rows_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
  {
    if (e.Action != NotifyCollectionChangedAction.Move) return;
    for (var i = 0; i < rgv_Control.Rows.Count; i++)
    {
      rgv_Control.Rows[i].Cells["Num"].Value = i + 1;
    }
  }

  /// <summary>
  /// 测试数据1
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_Data_Click(object sender, EventArgs e)
  {
    var rowIndexList = new List<string>();
    var rows = GetSelData(ref rowIndexList);//测试GetSelData方法
  }

  /// <summary>
  /// 测试数据2
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_GetAllData_Click(object sender, EventArgs e)
  {
    var dt = GetAllGridViewData();//测试GetAllGridViewData方法
  }


  }
}

 

SelectColumnForm.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;
using System.Xml;

namespace RadGridViewControl
{
  public partial class SelectColumnForm : Form
  {
  /// <summary>
  /// 定义xml文件
  /// </summary>
  public string Xml { get; set; }

  public SelectColumnForm()
  {
    InitializeComponent();
  }

  public SelectColumnForm(string xml)
  {
    InitializeComponent();
    Xml = xml;
    AddColumns();
    SetRadGridViewProperty();
    var list = ReadXml();
    AddRows(list);
    rgv_SelectColumn.Rows.CollectionChanged += Rows_CollectionChanged;
  }

  /// <summary>
  /// 获取拖动后的数据记录
  /// </summary>
  /// <returns></returns>
  public DataTable GetAllGridViewData()
  {
    var dt = new DataTable();
    foreach (var column in rgv_SelectColumn.Columns)
    {
      var dataColumn = new DataColumn
      {
        ColumnName = column.Name
      };
      dt.Columns.Add(dataColumn);
    }
    foreach (GridViewRowInfo t in rgv_SelectColumn.Rows)
    {
      var datarow = dt.NewRow();
      for (var j = 0; j < dt.Columns.Count; j++)
      {
        datarow[dt.Columns[j].ColumnName] = t.Cells[dt.Columns[j].ColumnName].Value;
      }
      dt.Rows.Add(datarow);
    }
    return dt;
  }


  /// <summary>
  /// 修改xml文件
  /// </summary>
  /// <param name="dt"></param>
  private void ModifyXml(DataTable dt)
  {
    XmlDataDocument doc = new XmlDataDocument();
    try
    {
      doc.Load(Xml);
      XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
      XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
      if (null == dataCellsNode) return;
      XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

      foreach (XmlNode node in dataCellNode)
      {
        var chinesename = node.SelectSingleNode("chinese_name").InnerText;
        var row = SearchRows(chinesename, dt);
        node.SelectSingleNode("show_index").InnerText = (int.Parse(row[0].ToString()) + 1).ToString();
        node.SelectSingleNode("visible").InnerText = row[1].ToString();
        node.SelectSingleNode("width").InnerText = row[3].ToString();
        switch (row[4].ToString())
        {
          case "左对齐":
          node.SelectSingleNode("align").InnerText = "1";
          break;
          case "右对齐":
          node.SelectSingleNode("align").InnerText = "2";
          break;
          case "居中对齐":
          node.SelectSingleNode("align").InnerText = "0";
          break;
          default: break;
          }
        }
      doc.Save(Xml);
    }
    catch (Exception ex)
    {

    }
  }

  private object[] SearchRows(string rowname, DataTable dt)
  {
    foreach (DataRow row in dt.Rows)
    {
      if (row["colname"].ToString() == rowname)
      {
        return row.ItemArray;
      }
    }
    return null;
  }

  /// <summary>
  /// 添加数据行
  /// </summary>
  /// <param name="list"></param>
  private void AddRows(List<SelectColumn> list)
  {
    var count = 0;
    var linqList = (from column in list
            orderby column.ShowIndex
            select column).ToList();
    foreach (var selectColumn in linqList)
    {
      var obj = new object[list.Count];
      obj[0] = ++count;
      obj[1] = selectColumn.IsVisible;
      obj[2] = selectColumn.ChineseColumnName;
      obj[3] = selectColumn.Width;
      switch (selectColumn.Align)
      {
        case 0:
        obj[4] = "居中对齐";
        break;
        case 1:
        obj[4] = "左对齐";
        break;
        case 2:
        obj[4] = "右对齐";
        break;
      }
      rgv_SelectColumn.Rows.Add(obj);
      }
    }

  private void btn_Ok_Click(object sender, EventArgs e)
  {
    var dt = GetAllGridViewData();
    ModifyXml(dt);
    DialogResult=DialogResult.OK;
    Close();
  }

  /// <summary>
  /// 添加数据列
  /// </summary>
  private void AddColumns()
  {
    var num = new GridViewTextBoxColumn("Num", "Num");
    num.HeaderText = "序 号";
    num.ReadOnly = true;
    num.Width = 50;
    num.WrapText = false;
    num.TextAlignment = ContentAlignment.MiddleCenter;

    var chk = new GridViewCheckBoxColumn("Chk", "Chk");
    chk.HeaderText = "选 择";
    chk.ReadOnly = false;
    chk.Width = 50;
    chk.WrapText = false;

    var colname = new GridViewTextBoxColumn("colname", "colname");
    colname.HeaderText = "列 名";
    colname.ReadOnly = true;
    colname.Width = 100;
    colname.WrapText = false;
    colname.TextAlignment = ContentAlignment.MiddleCenter;

    var colwidth = new GridViewDecimalColumn("colwidth", "colwidth");
    colwidth.HeaderText = "列 宽";
    colwidth.ReadOnly = false;
    colwidth.DataType = typeof(int);
    colwidth.Width = 80; ;
    colwidth.WrapText = false;
    colwidth.TextAlignment = ContentAlignment.MiddleCenter;
    colwidth.FormatString = "{0:d}"

    var colalign = new GridViewComboBoxColumn("colalign", "colalign");
    colalign.HeaderText = "对齐方式";
    colalign.DataSource = new[] { "左对齐", "居中对齐", "右对齐" };
    colalign.Width = 100;
    colalign.WrapText = false;
    colalign.TextAlignment = ContentAlignment.MiddleCenter;

    rgv_SelectColumn.Columns.Add(num);
    rgv_SelectColumn.Columns.Add(chk);
    rgv_SelectColumn.Columns.Add(colname);
    rgv_SelectColumn.Columns.Add(colwidth);
    rgv_SelectColumn.Columns.Add(colalign);
  }

  /// <summary>
  /// 设置RadGridView控件属性
  /// </summary>
  private void SetRadGridViewProperty()
  {
    rgv_SelectColumn.EnableGrouping = false;//去掉分组
    rgv_SelectColumn.AllowDrop = true;
    rgv_SelectColumn.AllowRowReorder = true;
    rgv_SelectColumn.AddNewRowPosition = SystemRowPosition.Bottom;
    rgv_SelectColumn.ShowRowHeaderColumn = false;
    rgv_SelectColumn.AllowColumnHeaderContextMenu = false;
    rgv_SelectColumn.AllowColumnResize = false;
    rgv_SelectColumn.AllowColumnReorder = false;
    rgv_SelectColumn.EnableSorting = false;
    rgv_SelectColumn.AllowAddNewRow = false;
    rgv_SelectColumn.AllowRowResize = false;
  }


  /// <summary>
  /// xml文件路径+名称
  /// </summary>
  public List<SelectColumn> ReadXml()
  {
    List<SelectColumn> selectColumns = new List<SelectColumn>();
    XmlDataDocument doc = new XmlDataDocument();
    try
    {

      doc.Load(Xml);

      XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
      XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
      if (null == dataCellsNode) return null;
      XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

      foreach (XmlNode node in dataCellNode)
      {
        SelectColumn selectColumn = new SelectColumn();
        selectColumn.ColumnName = node.SelectSingleNode("cell_name").InnerText;
        selectColumn.ChineseColumnName = node.SelectSingleNode("chinese_name").InnerText;
        selectColumn.IsVisible = bool.Parse(node.SelectSingleNode("visible").InnerText);
        selectColumn.Width = int.Parse(node.SelectSingleNode("width").InnerText);
        selectColumn.Align = int.Parse(node.SelectSingleNode("align").InnerText);
        selectColumn.ShowIndex = int.Parse(node.SelectSingleNode("show_index").InnerText);
        selectColumns.Add(selectColumn);
        }
      }
    catch (Exception ex)
    {

    }
    return selectColumns;
  }

  /// <summary>
  /// 行拖动时控件序号的显示
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void Rows_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
  {
    if (e.Action != NotifyCollectionChangedAction.Move) return;
    for (var i = 0; i < rgv_SelectColumn.Rows.Count; i++)
    {
      rgv_SelectColumn.Rows[i].Cells["Num"].Value = i + 1;
    }
    }

  }
}

目录
相关文章
|
3月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
|
4月前
|
索引
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
38 0
|
4月前
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
61 0
|
5月前
设置按钮背景为透明去掉button按钮左右两边的留白
设置按钮背景为透明去掉button按钮左右两边的留白
C#创建无边框可拖动窗口
C#创建无边框可拖动窗口
171 0
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
QT 事件过滤器实现鼠标悬浮时两个按钮背景互换
|
C#
WPF 获取鼠标屏幕位置、窗口位置、控件位置
原文:WPF 获取鼠标屏幕位置、窗口位置、控件位置 public struct POINT { public int X; public int Y; ...
1819 0
|
C#
WPF 获得鼠标相对于屏幕的位置,相对于控件的位置
原文:WPF 获得鼠标相对于屏幕的位置,相对于控件的位置 相对于屏幕的位置   第一步:     ///     /// 用于获得鼠标相对于屏幕的位置    ///     public class Win32    {        [StructLayout(LayoutKind.
1124 0