2013-04-04 2 views
9

имеет текст, изображение, а затем установите флажок,как изменить проверить изображение на флажок

Я хочу использовать лучшее изображение для проверки, но не может найти способ изменить проверяемые и непроверяемые изображения

this.checkBox1.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; 
this.checkBox1.Checked = true; 
this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; 
this.checkBox1.Image = global::ClientExam.Properties.Resources.action32; 
this.checkBox1.Location = new System.Drawing.Point(145, 140); 
this.checkBox1.Name = "checkBox1"; 
this.checkBox1.Size = new System.Drawing.Size(273, 127); 
this.checkBox1.TabIndex = 0; 
this.checkBox1.Text = "checkBox1"; 
this.checkBox1.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; 
this.checkBox1.UseVisualStyleBackColor = true; 

Кто-нибудь знает о том, кто не требует от меня собственного контроля?

+4

Wpf или WinForm? вы хотите изменить стиль chenkbox? – KF2

+0

похоже на WinForms. – Dilshod

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

8

Если вы ищете, как это сделать в Winforms, простой ответ заключается в создании нового класса флажка, который происходит из CheckBox, а затем переопределяет метод OnPaint.

Здесь complete tutorial о том, как создать пользовательские флажки.

-1

Простой один:

переопределяет флажок OnPaint(PaintEventArgs e), как показано ниже:

Graphics g = e.Graphics; 

     base.OnPaint(e); 
     //// Fill the background 
     //SetControlSizes(); 

     // Paint the outer rounded rectangle 
     g.SmoothingMode = SmoothingMode.AntiAlias; 
     using (GraphicsPath outerPath = GeneralUtilities.RoundedRectangle(mLabelRect, 1, 0)) 
     { 
      using (LinearGradientBrush outerBrush = new LinearGradientBrush(mLabelRect, 
        mGradientTop, mGradientBottom, LinearGradientMode.Vertical)) 
      { 
       g.FillPath(outerBrush, outerPath); 
      } 
      using (Pen outlinePen = new Pen(mGradientTop, mRectOutlineWidth)) 
      { 
       outlinePen.Alignment = PenAlignment.Inset; 
       g.DrawPath(outlinePen, outerPath); 
      } 
     } 

     //// Paint the gel highlight 
     using (GraphicsPath innerPath = GeneralUtilities.RoundedRectangle(mHighlightRect, mRectCornerRadius, mHighlightRectOffset)) 
     { 
      using (LinearGradientBrush innerBrush = new LinearGradientBrush(mHighlightRect, 
        Color.FromArgb(mHighlightAlphaTop, Color.White), 
        Color.FromArgb(mHighlightAlphaBottom, Color.White), LinearGradientMode.Vertical)) 
      { 
       g.FillPath(innerBrush, innerPath); 
      } 
     } 
     // Paint the text 
     TextRenderer.DrawText(g, Text, Font, mLabelRect, Color.White, Color.Transparent, 
     TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); 

Но если вы хотите иметь хороший вы должны использовать wpf CheckBox ControlTemplate Example

0

У меня вокруг это по-другому, я использую фоновое изображение и центрирую его, а затем меняю основное изображение, когда установлен флажок. Это похоже на то, что я хочу.

Существует проблема с этим, фоновое изображение, если недопустимый размер с подделкой контрольного изображения, и поэтому он не будет выглядеть правильно.

правильное решение, как описывает icemanind.

5

Для тех, кто предпочел бы не переопределить OnPaint, есть альтернативное решение:

  1. Добавить ImageList контроль и заполнить его с изображениями, чтобы отразить проверили/бесконтрольно состояния.
  2. Установите Appearance свойство вашего Checkbox управления для Button (чтобы избавиться от стандартного значка CheckBox)
  3. Установите его FlatStyle свойства Flat (так что управление не выглядит как кнопка).
    Примечание. Возможно, вы захотите также проверить свою группу свойств «FlatAppearance». А именно CheckedBackColor, MouseDownBackColor, MouseOverBackColor, т. Е. Установить их все на Control значение.
  4. Checkbox управление ImageList имущество на ваше имя ImageList управление.
  5. CheckboxImageindex и ImageAlign свойства отражают его текущее состояние.
  6. Последнее и самое главное установлено Checkbox свойство управления TextImageRelation (это значение не позволит перекрывать текст и изображение, если вы этого не хотите). То есть Значение ImageBeforetext представляет собой обычное расположение значка CheckBox.

Теперь единственное, что осталось сделать, это изменить изображение, когда состояние изменяется, чему-л так:

private void chkMyCheckBoxWithAnImage_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chkMyCheckBoxWithAnImage.Checked) 
      chkMyCheckBoxWithAnImage.ImageIndex = 1; 
     else 
      chkMyCheckBoxWithAnImage.ImageIndex = 0; 
    } 
Смежные вопросы