我正在构建一个应用程序,我在树视图中显示数据,当用户双击树视图中的元素时,他们单击的节点将替换为节点的可编辑版本。编辑不同节点的方式差异很大,因此使用内置功能更改节点文本是不可接受的。我需要使用属性网格并定义[Editor]属性。
唯一的问题是属性网格显示两列:一列具有属性的名称,另一列具有其值。我只需要显示值列(用户可以编辑的部分)。有没有办法删除第一列,或在另一个只显示一列的自定义类中使用属性网格的功能?
答案 0 :(得分:2)
如果不破坏财产网格,这是不可能的。这是一个可以更改标签列宽度的代码:
public static void SetLabelColumnWidth(PropertyGrid grid, int width)
{
if (grid == null)
throw new ArgumentNullException("grid");
// get the grid view
Control view = (Control)grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid);
// set label width
FieldInfo fi = view.GetType().GetField("labelWidth", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(view, width);
// refresh
view.Invalidate();
}
public static void ResetLabelColumnWidth(PropertyGrid grid)
{
SetLabelColumnWidth(grid, -1);
}
像这样使用它来删除标签栏:
SetLabelColumnWidth(propertyGrid1, 0);
重置功能可恢复标签栏。
当然,它是一个黑客,所以它可能在将来不起作用。还有一些问题:
希望这有帮助!