如何以编程方式在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 

但是,我无法使用此代码来设置背景颜色,它让我看到了如下错误:

Code error

我相信这上面的错误是由于AppointmentStorage在设计时(在调度控制的属性窗口中)本身禁用。请参考下面的图片:

See properties, that appointment->Storage->SchedulerStorage1

任何帮助将不胜感激。

+0

你的标题指出你想知道如何做出改变编程,但你已经知道该怎么做。你刚刚发布了如何做到这一点。你的问题似乎表明,你真正想要的是通过设计师进行改变。是这样吗?请编辑您的问题或标题,以免它们互相矛盾。 – jmcilhinney

+0

您提供的代码示例似乎在搜索所有标签,并且当它找到与某种颜色匹配的标签时,它将更改您定义的约会空约会的labelID(顺便说一句,这些标签似乎已被标记为过时)在你的代码中。可悲的是,代码对我来说毫无意义。当然你应该改变'.Color'属性。无论是否在设计时禁用了某些东西,都不应该影响您正在编写的代码。 –

去通过文档: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; 
}