Я переопределил метод onPaint, и я планирую сделать небольшую модификацию, для которой мне нужно передать список этого сценария С# из моего кода VB.NET. Ниже мой код.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.Clear(SystemColors.Window);
for (int i = 0; i < Months.Length; i++)
{
foreach (MonthViewDay day in Months[i].Days)
{
if (!day.Visible) continue;
MonthViewBoxEventArgs evtDay = new MonthViewBoxEventArgs(e.Graphics, day.Bounds, day.Date.Day.ToString(),
StringAlignment.Far,
day.Grayed ? DayGrayedText : (day.Selected ? DaySelectedTextColor : ForeColor),
day.Selected ? DaySelectedBackgroundColor : DayBackgroundColor);
if (day.Date.Equals(DateTime.Now.Date))
{
evtDay.BorderColor = TodayBorderColor;
}
//this is where I plant to add my code IF I get to know to pass a list
else
{
//search if day.Date is present in the list
//if present then update a different border color
}
DrawBox(evtDay);
}
Просто примечание, мой параметр списка - другой пользовательский класс. Любые решения или подход, которые я должен использовать здесь?
Заранее спасибо.
Вы не можете передать список через событие onPaint, что вы можете сделать, это передать его другим способом и использовать этот parmater в событии on paint
Вы можете изменить свой класс следующим образом:
Object obj = new Object();
List<int> _list = new List<int>();
Public void PassList(List<int> myList)
{
lock(obj)
{
_list = myList;
}
}
protected override void OnPaint(PaintEventArgs e)
{
lock(obj)
{
// Do something with the _list
}
}
Подпись события onPaint
protected virtual void OnPaint(PaintEventArgs e)
Поэтому вы не можете передавать какие-либо другие аргументы, особенно, что PaintEventArgs
не имеет никаких дополнительных свойств, таких как Data
или ExtendedProperties
onPaint
.Thread.SetData
а затем получить его в своем onPaint
, выпустив Thread.GetData
.это то, что я сделал...
Я добавил обработчик для события рисования
AddHandler this.monthView1.Paint, AddressOf this.iPass //this is the method that would pass the list
Я обновил свой пользовательский контроль, добавив метод, упомянутый @User
public void PassList(List<DateTime> myList)
{
lock (obj)
{
_list = myList;
}
}
Теперь, внутри моего protected override void OnPaint(PaintEventArgs e)
событие, я смог получить доступ к _list и выполнить соответствующие операции