DevExpress TreeList コントロールで FocusedNode の X 座標と Y 座標を取得するにはどうすればよいですか?
質問する
2637 次
2 に答える
2
これは私が実装した方法です:
/// <summary>
/// Get the position and size of a displayed node.
/// </summary>
/// <param name="node">The node to get the bounds for.</param>
/// <param name="cellIndex">The cell within the row to get the bounds for.
/// Defaults to 0.</param>
/// <returns>Bounds if exists or empty rectangle if not.</returns>
public Rectangle GetNodeBounds(NodeBase node, int cellIndex = 0)
{
// Check row reference
RowInfo rowInfo = this.ViewInfo.RowsInfo[node];
if (rowInfo != null)
{
// Get cell info from row based on the cell index parameter provided.
CellInfo cellInfo = this.ViewInfo.RowsInfo[node].Cells[cellIndex] as CellInfo;
if (cellInfo != null)
{
// Return the bounds of the given cell.
return cellInfo.Bounds;
}
}
return Rectangle.Empty;
}
于 2012-09-04T14:25:39.270 に答える
0
CustomDrawNodeCell イベントをフックすることにより、xtraTeeList コントロール内のセルのジオメトリ データを収集できます。
ただし、データは、セルが描画されるまで利用できません。
以下の例では、フォーカスされたノードが変更されたときにジオメトリの詳細が出力されます。
using System;
using System.Collections.Generic;
using System.Text;
using DevExpress.XtraTreeList;
using System.Windows.Forms;
using System.Drawing;
namespace StackOverflowExamples {
public class XtraTreeListCellInformation {
public void How_To_Get_Geometric_Data_From_XtraTreeList() {
Form frm = new Form();
Label status = new Label() { Dock = DockStyle.Bottom };
TreeList list = new TreeList() { Dock = DockStyle.Fill };
Dictionary<int/*NodeID*/, Rectangle> geometryInfo = new Dictionary<int, Rectangle>();
frm.Controls.AddRange( new Control[] { list, status } );
list.DataSource = new[] { new { Name = "One" }, new { Name = "Two" }, new { Name = "Three" } };
list.CustomDrawNodeCell += ( object sender, CustomDrawNodeCellEventArgs e ) => {
if( !geometryInfo.ContainsKey( e.Node.Id ) ) {
geometryInfo.Add( e.Node.Id, e.Bounds );
} else {
geometryInfo[e.Node.Id] = e.Bounds;
}
};
list.FocusedNodeChanged += ( object sender, FocusedNodeChangedEventArgs e ) => {
status.Text = "Unknown";
if( e.Node != null ) {
Rectangle rect = Rectangle.Empty;
if( geometryInfo.TryGetValue( e.Node.Id, out rect ) ) {
status.Text = rect.ToString();
} else {
status.Text = "Geometry Data Not Ready";
}
}
};
frm.ShowDialog();
}
}
}
于 2012-08-14T13:58:21.720 に答える