如何向 Telerik RadPropertyGrid 添加进度条?
How to add progress bar to Telerik RadPropertyGrid?
我使用 Telerik WinForms 包。
我的 RadPropertyGrid 显示一些设置:
radPropertyGrid1.SelectedObject = m_db;
radPropertyGrid1.ReadOnly = true;
如何将新项目添加为 ProgressBar 以显示百分比和颜色?它是静态字段,不需要动态改变任何东西。
或者作为第二种方式:如何使用 % 添加彩色字段?
为了在 RadPropertyGrid 中显示进度条,可能的解决方案是使用自定义项。 RadPropertyGrid 允许您创建和使用您自己的自定义值项目,允许您添加所需的编辑器以满足您的业务需求。您可以在此处找到有关此主题的更多信息:https://docs.telerik.com/devtools/winforms/controls/propertygrid/custom-items
为了您的参考,我准备了一个示例演示如何实现您的要求。请注意,这是一个示例演示,可能无法涵盖所有可能的情况。请根据您的具体需要随意修改或扩展它。
请参考以下代码片段:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
PropertyStoreItem stringItem = new PropertyStoreItem(typeof(string), "String", "Telerik", "Property storing a string value", "Telerik");
RadPropertyStore store = new RadPropertyStore();
store.Add(stringItem);
PropertyStoreItem progressItem = new PropertyStoreItem(typeof(int), "Progress", 40, "Represents a progress bar element.");
store.Add(progressItem);
this.radPropertyGrid1.SelectedObject = store;
this.radPropertyGrid1.CreateItemElement += this.RadPropertyGrid1_CreateItemElement;
}
private void RadPropertyGrid1_CreateItemElement(object sender, CreatePropertyGridItemElementEventArgs e)
{
if (e.ItemElementType == typeof(PropertyGridItemElement))
{
if (e.Item.Name == "Progress")
{
e.ItemElementType = typeof(CustomItemElement);
}
else
{
e.ItemElementType = typeof(DefaultPropertyGridItemElement);
}
}
}
}
public class CustomPropertyGridValueElement : PropertyGridValueElement
{
RadProgressBarElement progressBarElement;
protected override void CreateChildElements()
{
base.CreateChildElements();
progressBarElement = new RadProgressBarElement();
this.Children.Add(progressBarElement);
}
public override void Synchronize()
{
PropertyGridItem item = this.VisualItem.Data as PropertyGridItem;
if (item != null && item.Value != DBNull.Value)
{
this.progressBarElement.Value1 = Convert.ToInt16(item.Value);
}
}
}
public class CustomItemElement : PropertyGridItemElement
{
protected override PropertyGridValueElement CreatePropertyGridValueElement()
{
return new CustomPropertyGridValueElement();
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(PropertyGridItemElement);
}
}
public override bool IsCompatible(PropertyGridItemBase data, object context)
{
return data.Label == "Progress";
}
}
public class DefaultPropertyGridItemElement : PropertyGridItemElement
{
protected override Type ThemeEffectiveType
{
get
{
return typeof(PropertyGridItemElement);
}
}
public override bool IsCompatible(PropertyGridItemBase data, object context)
{
return data.Label != "Progress";
}
}
enter image description here
我使用 Telerik WinForms 包。 我的 RadPropertyGrid 显示一些设置:
radPropertyGrid1.SelectedObject = m_db;
radPropertyGrid1.ReadOnly = true;
如何将新项目添加为 ProgressBar 以显示百分比和颜色?它是静态字段,不需要动态改变任何东西。
或者作为第二种方式:如何使用 % 添加彩色字段?
为了在 RadPropertyGrid 中显示进度条,可能的解决方案是使用自定义项。 RadPropertyGrid 允许您创建和使用您自己的自定义值项目,允许您添加所需的编辑器以满足您的业务需求。您可以在此处找到有关此主题的更多信息:https://docs.telerik.com/devtools/winforms/controls/propertygrid/custom-items
为了您的参考,我准备了一个示例演示如何实现您的要求。请注意,这是一个示例演示,可能无法涵盖所有可能的情况。请根据您的具体需要随意修改或扩展它。
请参考以下代码片段:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
PropertyStoreItem stringItem = new PropertyStoreItem(typeof(string), "String", "Telerik", "Property storing a string value", "Telerik");
RadPropertyStore store = new RadPropertyStore();
store.Add(stringItem);
PropertyStoreItem progressItem = new PropertyStoreItem(typeof(int), "Progress", 40, "Represents a progress bar element.");
store.Add(progressItem);
this.radPropertyGrid1.SelectedObject = store;
this.radPropertyGrid1.CreateItemElement += this.RadPropertyGrid1_CreateItemElement;
}
private void RadPropertyGrid1_CreateItemElement(object sender, CreatePropertyGridItemElementEventArgs e)
{
if (e.ItemElementType == typeof(PropertyGridItemElement))
{
if (e.Item.Name == "Progress")
{
e.ItemElementType = typeof(CustomItemElement);
}
else
{
e.ItemElementType = typeof(DefaultPropertyGridItemElement);
}
}
}
}
public class CustomPropertyGridValueElement : PropertyGridValueElement
{
RadProgressBarElement progressBarElement;
protected override void CreateChildElements()
{
base.CreateChildElements();
progressBarElement = new RadProgressBarElement();
this.Children.Add(progressBarElement);
}
public override void Synchronize()
{
PropertyGridItem item = this.VisualItem.Data as PropertyGridItem;
if (item != null && item.Value != DBNull.Value)
{
this.progressBarElement.Value1 = Convert.ToInt16(item.Value);
}
}
}
public class CustomItemElement : PropertyGridItemElement
{
protected override PropertyGridValueElement CreatePropertyGridValueElement()
{
return new CustomPropertyGridValueElement();
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(PropertyGridItemElement);
}
}
public override bool IsCompatible(PropertyGridItemBase data, object context)
{
return data.Label == "Progress";
}
}
public class DefaultPropertyGridItemElement : PropertyGridItemElement
{
protected override Type ThemeEffectiveType
{
get
{
return typeof(PropertyGridItemElement);
}
}
public override bool IsCompatible(PropertyGridItemBase data, object context)
{
return data.Label != "Progress";
}
}
enter image description here