기본적으로 내 질문은 기본적으로 WinForms의 ComboBox 용 DrawItem을 구현하고 Text 속성을 변경하며 왜 멈출 수 있습니까? 내 콤보 상자의 OwnerDraw DrawItem 이벤트도 Text 속성 값을 변경합니다.
내하는 OwnerDraw 이벤트 "도"항목 [] 컨텍스트에 대한
(즉, 아래의 DrawItem 이벤트에서 구현)의 모든 항목과 동일한 논리로 설정됩니다 Text 속성을 제외하고 완벽하게 작동하기 때문에
, 나는 URL의의를 보여 목록,하지만 일부는 너무 오래 나는 기본적으로 그들을 잘라하고 텍스트를 넣어 "..."마지막에 - 더 읽기 쉽게. DataSource를 설정하여 "DisplayUrl"클래스의 속성 하나를 렌더링하지만 실제 값으로 다른 "Url"을 사용합니다. 어떻게 든 DrawItem 이벤트도 있기 때문에도이 코드를 실행 한 후 "텍스트"속성을 초래되어 일부 코드의 끝에서 (아래 myURL이), 내가 명시 적으로 설정 cmbUrl.Text = "전체 텍스트"
그러나 일단 DrawItem 이벤트가 끝나면 Text 속성은 Item [0]과 동일하게 설정됩니다. 텍스트와 즉 잘려 -에서 그대로 "FULL T ..."
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', 이것은'Url'과'라는 최소한 2 개 속성이 DisplayUrl' 이렇게 무엇인가' DisplayMember' 귀하의 콤보 박스? –
DisplayMember = DisplayUrl ...이 텍스트 속성을 바인딩 할 것 같습니다? – PandaWood
당신은'DisplayMember = "DisplayUrl"'을 설정했기 때문에, 당신의 comboBox는 항상'DisplayUrl'에서 무엇을 보여 주며'http : // abcd ... '와 같은 어떤 값을 가지고 있음을 모두 알고 있습니다''DisplayMember '당신의 콤보 박스가 내려 졌는지 아닌지에 따라. –