如何在表单中定位按钮,使其始终位于DevExpress网格中的列之上?
Grid列已设置为无法调整大小,但网格和列将使用表单重新调整大小。 System.Forms.Control的PointToScreen method看起来像提供此功能,但不是DevExpress gridviewcolumn中的方法。
答案 0 :(得分:2)
您可以找到相对于GridControl
的列坐标,然后转换为Form
坐标。为此,您可以使用GridColumnsInfo
属性中的GridViewInfo.ColumnsInfo
对象。要获取GridViewInfo
对象,您可以使用gridView.GetViewInfo()
方法
找到坐标后,您需要订阅在不同GridView
和GridControl
更改时发生的事件。例如,您可以订阅GridView.Layout
和
GridView.LeftCoordChanged
个事件。要调整大小,您需要订阅GridControl.Resize
事件。
例:
private void UpdatePosition(GridView gridView, string columnName, Control control)
{
var column = gridView.Columns[columnName];
if (column == null) return;
var viewInfo = (GridViewInfo)gridView.GetViewInfo(); //using DevExpress.XtraGrid.Views.Grid.ViewInfo
var columnInfo = viewInfo.ColumnsInfo[column];
if (columnInfo != null)
{
var bounds = columnInfo.Bounds; //column's rectangle of coordinates relative to GridControl
var point = PointToClient(gridView.GridControl.PointToScreen(bounds.Location)); //translating to form's coordinates
control.Left = point.X;
control.Top = point.Y - control.Height;
control.Width = bounds.Width;
control.Show();
}
else
control.Hide();
}
您可以为您订阅的每个事件调用此方法。