C#的dataGridView 怎样获取鼠标坐标位置所在行

C#的dataGridView 怎样获取鼠标坐标位置所在行,第1张

C# code

 返回光标处的行索引号()publicint GetRowIndexAt(int mouseLocation_Y)

{if (dataGridView1FirstDisplayedScrollingRowIndex<0)

{return-1;// no rows }if (dataGridView1ColumnHeadersVisible==true&& mouseLocation_Y<= dataGridView1ColumnHeadersHeight)

{return-1;

}int index= dataGridView1FirstDisplayedScrollingRowIndex;int displayedCount= dataGridView1DisplayedRowCount(true);for (int k=1; k<= displayedCount; )// 因为行不能ReOrder,故只需要搜索显示的行 {if (dataGridView1Rows[index]Visible==true)

{

Rectangle rect= dataGridView1GetRowDisplayRectangle(index,true);// 取该区域的显示部分区域if (rectTop<= mouseLocation_Y&& mouseLocation_Y< rectBottom)

{return index;

}

k++;// 只计数显示的行; }

index++;

}return-1;

}

测试用代码:

把当前行的index号(从0开始)显示到TextBox1上。

private void dataGridView1_MouseMove(object sender, MouseEventArgs e)

{

textBox1Text= GetRowIndexAt(eY)ToString();

}

首先要保证显示RowHeader列,然后在DataGridView的RowPostPaint事件中写如下代码:

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)

{

    using (SolidBrush b = new SolidBrush(dataGridView1RowHeadersDefaultCellStyleForeColor))

    {

        eGraphicsDrawString(eRowIndexToString(SystemGlobalizationCultureInfoCurrentUICulture), eInheritedRowStyleFont, b, eRowBoundsLocationX + 20, eRowBoundsLocationY + 4);

    }

}

你可以重写DataGridView的OnRowPostPaint方法或者直接在DataGridView的RowPostPaint事件里写,如下(重写DataGridView的OnRowPostPaint方法)

using System;

using SystemText;

using SystemWindowsForms;

using SystemDrawing;

namespace Test

{

class DataGridViewEx : DataGridView

{

SolidBrush solidBrush;

public DataGridViewEx()

{

solidBrush = new SolidBrush(thisRowHeadersDefaultCellStyleForeColor);

}

protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)

{

eGraphicsDrawString((eRowIndex + 1)ToString(), eInheritedRowStyleFont, solidBrush, eRowBoundsLocationX + 15, eRowBoundsLocationY + 5);

baseOnRowPostPaint(e);

}

}

}

问题在dataGridView1SelectedCells这里

你的文本框显示的是你选中的数据,而CellClick的时候SelectedCells里面应该是没有东西的

你处理下DataGridViewCellEventArgs 参数,从这里面可以取得你点击的数据 (行列号等)

添加列:

DataGridViewColumn column = new DataGridViewColumn();

设置column属性如:columnHeaderText = "列名";

dgv1columnsadd(column);

添加行:

DataGridViewRow row = new DataGridViewRow();

设置row属性

dgv1rowsadd(row);

(一)。自适应窗体的代码:

using System;

using SystemWindowsForms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

//1声明自适应类实例

AutoSizeFormClass asc = new AutoSizeFormClass();

public Form1()

{

InitializeComponent();

//如果加入"皮肤",则不能在Form1_Load中记录控件的大小和位置,因为有些控件如dataGridView的子控件还未完成

//而要在在Form1_SizeChanged中,第一次改变时,记录控件的大小和位置

thisskinEngine1SkinFile = "EmeraldColor1ssk";

}

//2 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小

private void Form1_Load(object sender, EventArgs e)

{

// asccontrollInitializeSize(this);

}

//3为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应

private void Form1_SizeChanged(object sender, EventArgs e)

{

asccontrolAutoSize(this);

//  thisWindowState = (SystemWindowsFormsFormWindowState)(2);//记录完控件的初始位置和大小后,再最大化

}

}

}

(二)。自适应类的代码

using SystemCollectionsGeneric;

using SystemWindowsForms;

namespace WindowsFormsApplication1

{

class AutoSizeFormClass

{

//(1)声明结构,只记录窗体和其控件的初始位置和大小。

public struct controlRect

{

public int Left;

public int Top;

public int Width;

public int Height;

}

实际 *** 作起来可能没有你想象的那么简单,你需要响应Form Resize之类的事件,然后根据事件,实时逐个调整控件的大小。在WPF中就简单多了。

,使用时需要先判断thisdataGridView1SelectedCellscount,不为0 在进行上面的 *** 作。

获取总行数:dataGridView1RowsCount;

获取当前选中行索引:int i = thisdataGridView1CurrentRowIndex;

获取当前选中列索引:int j = thisdataGridView1CurrentCellColumnIndex;

方法一:

thisdgvStuListSelectedRows[0]Cells["列"]ValueToString()

方法二:

dgvStuListRows[dgvStuListCurrentRowIndex]Cells["列名"]ValueToString()

/////////////////////////////////////////////////

点击已有数据行时只允许修改和删除,不可以添加,点击空白行时只运行添加,不允许删除和修改,那问题是如何来判断用户点击的是空白行呢,按钮是否可用的判断代码放在哪里呢?

解决方法:给datagrid添加mouse_enter事件

private void userInfo_MouseEnter(object sender,SystemEventArgs e) {

int row = userInfoCurrentCell RowNumber;

if(row == listSize) //list 是我用来存放数据表的对象集合, {

menuMenuItems[0]Enabled = true;

}

else

{

menuMenuItems[0]Enabled = false;

}

}

///////////////////////////////////////////////////////////

thisdataGridView1Rows[0]Cells[0]ReadOnly

0行0列ReadOnly=是否可编辑,返回布尔值

看看英文单词就知道了,不要总问别人,自己做记忆深刻

以上就是关于C#的dataGridView 怎样获取鼠标坐标位置所在行全部的内容,包括:C#的dataGridView 怎样获取鼠标坐标位置所在行、C# 中dev gridview怎么在最左边显示序号,如图显示、C#中DataGridView控件的行头显示序号的宽度适中也就是RowHearWidth属性 我想让行头显示是左对齐显示序号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10128995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存