Я пытаюсь закодировать окно ведения журнала / процесса на основе списка в формах и хочу изменить цвет текста на основе текста, который я ему отправляю (например, обычный, красный для предупреждения, серый для информации)
Я действительно новичок в Forms, не говоря уже о кастомной работе, подобной этой, но я дошел до этого (кодирование цвета фона на самом деле не нужно, но я оставил его):
$ProgressBox_DrawItem = {
param(
[System.Object] $sender,
[System.Windows.Forms.DrawItemEventArgs] $e
)
$itemIndex = $e.Index
# $lbItem= $Sender.Items[$e.Index]
$BgColour=[System.Drawing.Color]::White
$TextColour = [System.Drawing.Color]::DarkGray
If ($itemIndex -eq ($ProgressBox.Items.Count - 1)) {
Try {
$BgColourBrush = new-object System.Drawing.SolidBrush($BgColour)
$e.Graphics.FillRectangle($BgColourBrush, $e.Bounds)
$itemText = $ProgressBox.Items[$itemIndex].ToString()
$TextColourBrush = New-Object System.Drawing.SolidBrush($TextColour)
$e.Graphics.DrawString($itemText, $e.Font, $TextColourBrush, (new-object System.Drawing.PointF($e.Bounds.X, $e.Bounds.Y)))
}
Finally {
$BgColourBrush.Dispose()
$TextColourBrush.Dispose()
}
}
Else {
}
}
# Add new entry
$ProgressBox.Items.Add($InputText)
# Color new item
$ProgressBox.Add_DrawItem($ProgressBox_DrawItem)
# Relocate to bottom of listbox
$ProgressBox.TopIndex = $ProgressBox.Items.Count - 1
# Refresh listbox
$ProgressBox.Update()
Вышеприведенное работает, но оставляет список пустым, за исключением последнего элемента, который имеет правильные цвета, поэтому я предполагаю, что часть его работает нормально.
Я подозреваю, что неправильно понимаю, какэтот drawitem работает - он перерисовывает весь список?Поведение, на которое я надеялся, использовало «.Items.Add», чтобы добавить значение в цвете текста по умолчанию, а затем использовало его, чтобы добавить новую запись в другом цвете (оставив остальное «как есть»).
Может кто-нибудь помочь мне, пожалуйста?