ContextManuStripTool.show()位置错误
ContextManuStripTool.show() position is wrong
我正在努力学习如何使用 ContextMenuStrip
使用此代码时:
private void DG_dataGridView_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hitTest = DG_dataGridView.HitTest(e.X, e.Y);
if (hitTest.Type == DataGridViewHitTestType.ColumnHeader)//currentMouseOverRow >= 0)
{
string colName = DG_dataGridView.Columns[hitTest.ColumnIndex].Name;
GlobalParam.Insatance.ClickData = new RightClickData(hitTest, colName);
RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));
}
}
}
我看到菜单在正确的位置弹出
但是当我使用这段代码时:
private void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hitTest = DG_dataGridView.HitTest(e.Location.X, e.Location.Y);
string colName = DG_dataGridView.Columns[e.ColumnIndex].Name;
GlobalParam.Insatance.CustomMouseGridClickData = new CustomMouseOnGridClickData(e, hitTest.Type, colName);
RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));
}
}
我在 DataGridView
的左上角看到菜单弹出
我知道这是由于DataGridViewCellMouseEventArgs
的操作
我试图在 toolStrip.Show
方法中设置其他控件但没有成功
获得点击位置的正确方法是什么
使用 ColumnHeaderMouseClick 事件,您不必使用 HitTest 方法测试列是否被单击。另外,我认为坐标是相对于被点击的列,所以你可以尝试使用 GetColumnDisplayRectangle 函数来偏移它 属性:
void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
if (e.Button == MouseButtons.Right) {
if (e.ColumnIndex > -1) {
Rectangle r = DG_dataGridView.GetColumnDisplayRectangle(e.ColumnIndex, true);
RightClickToolStrip.Show(DG_dataGridView, r.Left + e.X, r.Top + e.Y);
}
}
}
我正在努力学习如何使用 ContextMenuStrip
使用此代码时:
private void DG_dataGridView_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hitTest = DG_dataGridView.HitTest(e.X, e.Y);
if (hitTest.Type == DataGridViewHitTestType.ColumnHeader)//currentMouseOverRow >= 0)
{
string colName = DG_dataGridView.Columns[hitTest.ColumnIndex].Name;
GlobalParam.Insatance.ClickData = new RightClickData(hitTest, colName);
RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));
}
}
}
我看到菜单在正确的位置弹出
但是当我使用这段代码时:
private void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hitTest = DG_dataGridView.HitTest(e.Location.X, e.Location.Y);
string colName = DG_dataGridView.Columns[e.ColumnIndex].Name;
GlobalParam.Insatance.CustomMouseGridClickData = new CustomMouseOnGridClickData(e, hitTest.Type, colName);
RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));
}
}
我在 DataGridView
我知道这是由于DataGridViewCellMouseEventArgs
的操作
我试图在 toolStrip.Show
方法中设置其他控件但没有成功
获得点击位置的正确方法是什么
使用 ColumnHeaderMouseClick 事件,您不必使用 HitTest 方法测试列是否被单击。另外,我认为坐标是相对于被点击的列,所以你可以尝试使用 GetColumnDisplayRectangle 函数来偏移它 属性:
void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
if (e.Button == MouseButtons.Right) {
if (e.ColumnIndex > -1) {
Rectangle r = DG_dataGridView.GetColumnDisplayRectangle(e.ColumnIndex, true);
RightClickToolStrip.Show(DG_dataGridView, r.Left + e.X, r.Top + e.Y);
}
}
}