如何在表单中定位按钮,使其始终位于 DevExpress 网格中的列上方?
网格列已设置为无法调整大小,但网格和列会随表单调整大小。System.Forms.Control具有看起来会提供此功能的PointToScreen 方法,但不是 DevExpress gridviewcolumn 中的方法。
如何在表单中定位按钮,使其始终位于 DevExpress 网格中的列上方?
网格列已设置为无法调整大小,但网格和列会随表单调整大小。System.Forms.Control具有看起来会提供此功能的PointToScreen 方法,但不是 DevExpress gridviewcolumn 中的方法。
您可以找到相对于 的列坐标,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();
}
您可以为您订阅的每个事件调用此方法。