2016-02-07 4 views
5

Я хочу изменить цвет рамки и фон квадрата и цвет галочки, но не текст. Чтобы лучше понять, что я хочу сделать это в следующем примере:Как изменить цвет флажка CheckBox?

  • checkBox1.Checked = false

  • checkBox1.Checked = true

Большое спасибо всем вам, отвечающим именно на этот запрос!

+0

Пожалуйста, вы скажите мне, что писать? – user5894584

+1

Пожалуйста, не делайте этого. Используйте регулярный флажок, который каждый узнает и знает, как использовать. Используйте тот, который будет правильно обрабатывать навигацию по клавиатуре. И используйте тот, который соответствует выбранной вами теме, чтобы он не торчал, как больной палец. Встроенные элементы управления уже полностью отлажены; ваше одноразовое управление, скорее всего, будет больше похоже на квадратное колесо. Ваши личные эстетические чувства часто не разделяются вашими пользователями. Лучше всего направить свое внимание на функциональность. –

+0

Спасибо за ответ и за ваш интерес.Я бы просто сказал вам, что создание приятного графического интерфейса не обязательно означает потерять функциональность главных принципов различных элементов управления, вам просто нужно скорректировать весь код до его идеи. – user5894584

ответ

9

Вы можете просто сделать отметку в случае Paint:

enter image description here

private void checkBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Point pt = new Point(e.ClipRectangle.Left + 2, e.ClipRectangle.Top + 4); 
    Rectangle rect = new Rectangle(pt, new Size(22, 22)); 
    if (checkBox1.Checked) 
    { 
     using (Font wing = new Font("Wingdings", 14f)) 
      e.Graphics.DrawString("ü", wing, Brushes.DarkOrange,rect); 
    } 
    e.Graphics.DrawRectangle(Pens.DarkSlateBlue, rect); 
} 

для этой работы вам необходимо:

  • набор Apperance = Appearance.Button
  • набор FlatStyle = FlatStyle.Flat
  • комплект TextAlign = ContentAlignment.MiddleRight
  • набор FlatAppearance.BorderSize = 0
  • набор AutoSize = false

Если вы хотите повторно использовать это будет лучше, чтобы подклассы флажок и переопределить OnPaint событие там. Вот пример:

enter image description here

public ColorCheckBox() 
{ 
    Appearance = System.Windows.Forms.Appearance.Button; 
    FlatStyle = System.Windows.Forms.FlatStyle.Flat; 
    TextAlign = ContentAlignment.MiddleRight; 
    FlatAppearance.BorderSize = 0; 
    AutoSize = false; 
    Height = 16; 
} 

protected override void OnPaint(PaintEventArgs pevent) 
{ 
    //base.OnPaint(pevent); 

    pevent.Graphics.Clear(BackColor); 

    using (SolidBrush brush = new SolidBrush(ForeColor)) 
     pevent.Graphics.DrawString(Text, Font, brush, 27, 4); 

    Point pt = new Point(4 , 4); 
    Rectangle rect = new Rectangle(pt, new Size(16, 16)); 

    pevent.Graphics.FillRectangle(Brushes.Beige, rect); 

    if (Checked) 
    { 
     using (SolidBrush brush = new SolidBrush(ccol)) 
     using (Font wing = new Font("Wingdings", 12f)) 
      pevent.Graphics.DrawString("ü", wing, brush, 1,2); 
    } 
    pevent.Graphics.DrawRectangle(Pens.DarkSlateBlue, rect); 

    Rectangle fRect = ClientRectangle; 

    if (Focused) 
    { 
     fRect.Inflate(-1, -1); 
     using (Pen pen = new Pen(Brushes.Gray) { DashStyle = DashStyle.Dot }) 
      pevent.Graphics.DrawRectangle(pen, fRect); 
    } 
} 

Вам может понадобиться Твик размеры элемента управления и шрифта .. И если вы хотите, чтобы вам расширить код в честь TextAlign и CheckAlign свойства.

И если вам нужен три-государственного контроль вы можете адаптировать код для отображения третьего состояния внешнего вида, особенно если вы думаете, который выглядит лучше, чем оригинал ..

+0

Я думаю, что этот последний код - это то, что я пытаюсь сделать, но то, что выходит, - это просто квадрат с цветной рамкой над кнопкой «Плоский», которая не допускает никакого взаимодействия. – user5894584

+0

Я пропустил чек на 'Checked', извините; обновлено. Кроме этого он работает здесь. – TaW

+0

Прошу прощения, но он все еще не работает. Почему его следует рассматривать как кнопку? – user5894584

3

Вы должны написать свой собственный флажок. Создав собственный элемент управления, в котором есть синий квадрат (возможно, наследуется от Button), который переключается между отмеченными и не проверенными изображениями событием OnClick и помещает рядом с ним ярлык.

Смежные вопросы