반응형

C# 가계부에서 거래별로 색상을 지정하는 기능은 거래를 등록할 때 설정할 수 있다.

버튼으로 색상을 선택하는 방법도 있지만, 8가지만 사용하게 되어있으므로 콤보박스를 사용해본다.


void Form_Load(object sender, EventArgs e)
{
    comboBoxEdit1.Properties.Items.Clear();
    comboBoxEdit1.Properties.Items.AddRange(new string[] { " ", "  ", "   ", "    ", "     ", "      ", "       ", "        " });
}

private void comboBoxEdit1_DrawItem(object sender, ListBoxDrawItemEventArgs e)
{
    Color userColor = e.Index switch
    {
        1 => Color.FromArgb(246, 144, 144),
        2 => Color.FromArgb(229, 196, 146),
        3 => Color.FromArgb(245, 237, 149),
        4 => Color.FromArgb(186, 226, 185),
        5 => Color.FromArgb(135, 190, 219),
        6 => Color.FromArgb(172, 167, 239),
        7 => Color.FromArgb(212, 138, 215),
        _ => Color.Transparent,
    };

    e.Cache.FillRectangle(userColor, e.Bounds);

    //e.Cache.DrawString(e.Item.ToString(), e.Appearance.Font, Brushes.Black, e.Bounds, e.Appearance.GetStringFormat());
    e.Handled = true;
}

private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
{
    (sender as ComboBoxEdit).Properties.Appearance.BackColor = (sender as ComboBoxEdit).SelectedIndex switch
    {
        1 => Color.FromArgb(246, 144, 144),
        2 => Color.FromArgb(229, 196, 146),
        3 => Color.FromArgb(245, 237, 149),
        4 => Color.FromArgb(186, 226, 185),
        5 => Color.FromArgb(135, 190, 219),
        6 => Color.FromArgb(172, 167, 239),
        7 => Color.FromArgb(212, 138, 215),
        _ => Color.Transparent,
    };
}

DrawItem 이벤트는 콤보박스 목록이 나타날 때 발생하고, SelectedIndexChanged 이벤트는 콤보박스 선택 아이템이 변경될 때 발생한다.

e.Handled = true;를 사용하면 ListBoxDrawItem에 핸들링 권한을 넘겨주어 아이템 선택, 마우스 오버 효과가 나타나지 않는다.

반응형

관련글