我有一架有两根柱子的超翼机。当右键单击任何单元格时,需要打开一个带有"Copy“选项的上下文菜单。然后,用户可以选择“复制”,这将复制单元格内容。
我已经有一个类"ExtendedLabel“,它扩展了类"Label”。此标签具有与上面相同的功能;不同之处在于右键单击发生在标签上。
问题是,如何将此ExtendedLabel集成为ultrawingrid的列数据类型?这是我尝试过的:
public class Content
{
public Content()
{
Item = new ExtendedLabel();
Value = new ExtendedLabel();
}
ExtendedLabel Item = new ExtendedLabel();
ExtendedLabel Value = new ExtendedLabel();
}
Content a = new Content();
a.Item.Text = "Item1"; // The ExtendedLabel has a property called "Text"
a.Value.Text = "Value1";
Content b = new Content();
a.Item.Text = "Item2";
a.Value.Text = "Value2";
List<Content> contents = new List<Content>();
contents.Add(a);
contents.Add(b);
ultrawingrid.DataSource = contents;现在网格是这样的。
Item Value
-------------------------------------------------------------
{ExtendedLabel, Text: Item1} {ExtendedLabel, Text: Value1}
{ExtendedLabel, Text: Item2} {ExtendedLabel, Text: Value2}然而,我想要的是:
Item Value
---------------
Item1 Value1
Item1 Value1除此之外,我这样做是正确的吗?这是最好的方法吗?如果不是,那是怎么做的?
蒂娅!
发布于 2012-08-13 21:02:04
未经过测试,但我认为网格绑定到您类的公共成员。
如果可行,请将内部标签的可见性更改为private,并将Item和Value公开为两个内部标签的文本。
public class Content
{
public Content()
{
Item = new ExtendedLabel();
Value = new ExtendedLabel();
}
private ExtendedLabel internal_Item = new ExtendedLabel();
private ExtendedLabel internal_Value = new ExtendedLabel();
public string Item
{
get{return internal_Item.Text;}
set{internal_Item.Text = value;}
}
public string Value
{
get{return internal_Value.Text;}
set{internal_Value.Text = value;}
}
} 发布于 2012-08-14 10:09:15
最好的方法是将网格绑定到公开所需属性的数据对象。例如,您可以拥有以下类:
public class DataItem
{
public string Item {get;set; }
public string Value {get;set;}
}然后创建一个列表并将其绑定到网格,因为网格将为每个公共属性创建一列,因此您将在网格中获得预期的值。请注意,如果列表可以更改,并且网格需要更新以响应这些更改,则应该使用BindingList而不是List。
默认情况下,网格将允许编辑值,并且您将拥有内置到使用键盘的网格中的复制和粘贴行为。有一个example in the help向您展示了如何在您的应用程序中使用与WinGrid一起工作的编辑菜单。
如果网格的复制和粘贴功能满足您的需求,那么您可以为网格本身显示一个上下文菜单,该菜单显示这些相同的选项。
https://stackoverflow.com/questions/11933629
复制相似问题