如何以编程方式在winforms中更改Devexpress XtraScheduler控件约会标签背景颜色?
问题描述:
我正在使用DevExpress 16,我正在使用数据库数据动态调度约会。现在,我安排了我的预约。我需要以编程方式更改约会标签背景颜色。如何以编程方式在winforms中更改Devexpress XtraScheduler控件约会标签背景颜色?
我发现了一些代码来改变约会标签背景颜色,这样,
Dim labels As AppointmentLabelCollection = schedulerControl1.Storage.AppointmentStorage.Labels
For i As Integer = 0 To labels.Count - 1
Dim currentLabel As AppointmentLabel = labels(i)
If currentLabel.Color = someColor Then
newApt.LabelId = i
Exit For
End If
Next
但是,我无法使用此代码来设置背景颜色,它让我看到了如下错误:
我相信这上面的错误是由于AppointmentStorage在设计时(在调度控制的属性窗口中)本身禁用。请参考下面的图片:
任何帮助将不胜感激。
答
去通过文档:Appointment Labels and Statuses
标签都存储在AppointmentStorage.Labels收藏。一个 个别标签由AppointmentLabel对象表示。若要 访问标签的显示名称和颜色,请使用其 UserInterfaceObject.DisplayName和AppointmentLabel.Color属性。
而不是使用约会的标签,您可以在SchedulerControl.CustomDrawAppointmentBackground事件处理程序中绘制约会的背景。这是另一种可以用来定制皮肤外观的方法。您可以使用其他自定义绘制事件也..从文档
例子:
public static void scheduler_CustomDrawAppointmentBackground(object sender, CustomDrawObjectEventArgs e)
{
AppointmentViewInfo viewInfo = e.ObjectInfo as AppointmentViewInfo;
// Specify the ratio of a completed task to the entire task.
double completenessRatio = 0.25 * ((int)(viewInfo.Appointment.ResourceId) % 4);
// Draw an appointment as usual.
e.DrawDefault();
// Draw a background rectangle.
Rectangle bounds = CalculateEntireAppointmentBounds(viewInfo);
DrawBackGroundCore(e.Cache, bounds, completenessRatio);
// Indicate that no default drawing is required.
e.Handled = true;
}
你的标题指出你想知道如何做出改变编程,但你已经知道该怎么做。你刚刚发布了如何做到这一点。你的问题似乎表明,你真正想要的是通过设计师进行改变。是这样吗?请编辑您的问题或标题,以免它们互相矛盾。 – jmcilhinney
您提供的代码示例似乎在搜索所有标签,并且当它找到与某种颜色匹配的标签时,它将更改您定义的约会空约会的labelID(顺便说一句,这些标签似乎已被标记为过时)在你的代码中。可悲的是,代码对我来说毫无意义。当然你应该改变'.Color'属性。无论是否在设计时禁用了某些东西,都不应该影响您正在编写的代码。 –