3

ボタンが常に DevExpress グリッドの列の上にくるように、フォーム内にボタンを配置するにはどうすればよいですか?

グリッド列はサイズ変更できないように設定されていますが、グリッドと列はフォームに合わせてサイズ変更されます。System.Forms.Controlには、この機能を提供するように見えるPointToScreen メソッドがありますが、DevExpress gridviewcolumn のメソッドではありません。

4

1 に答える 1

2

を基準とした列座標を見つけて、座標に変換できGridControlますForm。このために、プロパティGridColumnsInfoから取得できるオブジェクトを使用できGridViewInfo.ColumnsInfoます。GridViewInfoオブジェクトを取得するには、gridView.GetViewInfo()メソッドを使用できます。
座標を見つけたら、さまざまな場所で発生するイベントをサブスクライブする必要がGridViewありGridControlます。たとえばGridView.LayoutGridView.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();
}

サブスクライブしたすべてのイベントに対して、このメソッドを呼び出すことができます。

于 2014-06-12T10:16:59.653 に答える