2013-12-16 2 views
1

Я бы хотел создать CheckBox без границ. При этом флажок должен по-прежнему отображать галочку.Как я могу удалить границы CheckBox?

+1

ли обман может быть и речи? Я знаю, что это требует дополнительной работы, но вы можете создать свой собственный элемент управления или использовать метку без рамки и на белом фоне и просто добавить/удалить проверку события OnMouseUp. –

+0

@AndreiV Довольно уверен, что это сработает, хотя, как вы сказали, это подразумевает большую работу (фактически на самом деле). Был надеется на ответ, который подразумевал свойство контроля CheckBox или что-то в этом роде. Благодаря! –

+0

Когда ничего не работает, обманите :). Spor. –

ответ

0

Следуя совет AndreiV, я создал CustomControl которая унаследовала от Label. Затем я переопределяю события OnPaint и OnClick, чтобы заставить его выглядеть и вести себя как CheckBox. Чтобы отобразить флажок «Проверено изображение», я использовал немного краски для обрезки ее, чтобы мне было нужно.

Ниже приведен полный код:

public partial class FlatCheckBox : Label 
{ 
    public bool Checked { get; set; } 

    public FlatCheckBox() 
    { 
     InitializeComponent(); 
     Checked = false; 
    } 

    protected override void OnClick(EventArgs e) 
    { 
     Checked = !Checked; 
     Invalidate(); 
    } 

    protected override void OnPaint(PaintEventArgs pevent) 
    { 
     if (!DesignMode) 
     { 
      pevent.Graphics.Clear(Color.White); 

      var bigRectangle = new Rectangle(pevent.ClipRectangle.X, pevent.ClipRectangle.Y, 
              pevent.ClipRectangle.Width, pevent.ClipRectangle.Height); 
      var smallRectangle = new Rectangle(pevent.ClipRectangle.X + 1, pevent.ClipRectangle.Y + 1, 
               pevent.ClipRectangle.Width - 2, pevent.ClipRectangle.Height - 2); 

      var b = new SolidBrush(UllinkColors.NEWBLUE); 
      var b2 = new SolidBrush(Color.White); 

      pevent.Graphics.FillRectangle(b, bigRectangle); 
      pevent.Graphics.FillRectangle(b2, smallRectangle); 

      if (Checked) 
      { 
       pevent.Graphics.DrawImage(Resources.flatCheckedBox, new Point(3, 3)); 
      } 
     } 
    } 
} 
0

Выверенный ответ на this question гласит:

Вы не можете удалить только границу, потому что флажок нарисованы окна и она в значительной степени все или ничего.

Это потому, что System.Windows.CheckBox является встроенным элементом управления.

Обходным путем к этому будет привлечение собственного CustomCheckBox без видимых границ.

Надеюсь, это поможет.

+0

Если пользователь CustomCheckBox имеет в виду элемент управления, который наследуется от CheckBox, то это не будет работать на 100%. Даже если одно переопределяет событие OnPaint, удерживая нажатой кнопку мыши на checkBox, граница станет видимой. Однако другой пользовательский элемент управления может просто сделать трюк. Благодаря! –

3
using System; 
using System.Collections.Generic; 
using System.Drawing.Drawing2D; 
using System.Windows.Forms; 
using System.Linq; 
using System.Text; 

namespace WindowsFormsApplication1 
{ 
    public class RoundButton : Button 
    { 

     protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) 
     { 
      GraphicsPath grPath = new GraphicsPath(); 
      grPath.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height); 
      this.Region = new System.Drawing.Region(grPath); 
      base.OnPaint(e); 
     } 

     private void InitializeComponent() 
     { 
      this.SuspendLayout(); 
      this.ResumeLayout(false); 

     } 
    } 

} 

это класс, который генерирует настроенную круглую кнопку, может быть хорошим стартером для Вас, чтобы сделать свой собственный customCheckbox, делая подобный

+1

Это стартер, но я не думаю, что это хороший стартер. OP не может достичь того, чего он хочет с этим, также я думаю, что в этом вопросе не существует никакого отношения к «Региону», ему нужна какая-то обычная картина. –

+1

@KingKing, пример предоставляет все знания, необходимые OP для решения их проблемы. Изменив 2 строки, я получил это, чтобы сделать то, что OP что. –

+1

@AshBurlaczenko вы можете не понимать фактическую проблему OP, он может означать границу ** квадратного поля ** вокруг checkMark, а не границы checkbox самой. Не могли бы вы опубликовать несколько снимков того, что вы достигли? –

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