Мой вопрос в основном, реализует DrawItem для моего ComboBox в WinForms, меняет свойство Text, почему и я могу его остановить?Событие OwnerDraw DrawItem в моей combobox также меняет значение свойства Text
Потому что мое событие OwnerDraw работает отлично, за исключением имущества Текста «и» получает набор ту же логику, как и все элементы в пунктах [] (то есть, реализованных в DrawItem случае ниже)
Для контекста, я показываю в URL-адресе список, но некоторые из них настолько длинные, что я в основном разорвал их и поместил текст «...» в конец - сделать его более читаемым. У меня DataSource установлен так, что он отображает одно свойство моего класса «DisplayUrl», но использует другое «Url» для фактического значения. (MyUrl ниже)
В конце некоторого кода, я явно установить cmbUrl.Text = «ПОЛНЫЙ ТЕКСТ»
Но как-то событие DrawItem также осуществление «Текст» свойство, потому что даже после выполнения этого кода , как только событие DrawItem будет завершено, свойство Text будет установлено таким же, как Item [0]. то есть с текстом сколы - как в «ПОЛНОМ Т ...»
void cmbUrl_DrawItem(object sender, DrawItemEventArgs e)
{
var text = ((MyUrl)((ComboBox)sender).Items[e.Index]).DisplayUrl;
var brush = text.Contains("bla) ? Brushes.DarkGreen : Brushes.Black;
// Fill in the background
e.Graphics.FillRectangle(new SolidBrush(e.BackColor), e.Bounds);
if (e.Index < 0) return;
// Work out where every thing goes
int nX = e.Bounds.Left;
int nY = e.Bounds.Top;
const int nMarg = 2;
int nH = e.Bounds.Height - (2 * nMarg);
// Draw the Colour Gymph
var penFore = new Pen(e.ForeColor);
var rectGymph = new Rectangle(nX + nMarg, nY + nMarg, nH, nH);
e.Graphics.FillRectangle(brush, rectGymph);
e.Graphics.DrawRectangle(penFore, rectGymph);
var fullWidth = nX + nH + (2 * nMarg);
e.Graphics.DrawString(text, e.Font, brush, fullWidth, e.Bounds.Top);
}
Я могу видеть, что ваш выпадающий 'Item' является тип' MyUrl', это имеет, по крайней мере, 2 свойства, называемые '' Url' и DisplayUrl' так, что это ' DisplayMember' вашего сообщения? –
DisplayMember = DisplayUrl ... так что это, похоже, также связывает свойство Text? – PandaWood
, потому что вы установили 'DisplayMember =" DisplayUrl "', ваш comboBox всегда показывает, что в 'DisplayUrl', и все мы знаем, что оно имеет некоторое значение, например' 'http: // abcd ... '' Вы должны изменить 'DisplayMember 'в зависимости от того, выпало ли ваше поле со списком или нет. –