2010-07-02 92 views

回答

30

複選框大小是在Windows窗體內硬編碼的,您不能混淆它。一種可能的解決方法是在現有的頂部繪製複選框。這不是一個很好的解決方案,因爲自動調整大小不能再按原樣工作,並且文本對齊方式混亂,但它是可用的。

向您的項目中添加一個新類並粘貼下面顯示的代碼。編譯。將新控件從工具箱的頂部拖放到表單上。調整控件的大小,以便獲得所需的框尺寸並確保其寬度足以適合文本。

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class MyCheckBox : CheckBox { 
    public MyCheckBox() { 
     this.TextAlign = ContentAlignment.MiddleRight; 
    } 
    public override bool AutoSize { 
     get { return base.AutoSize; } 
     set { base.AutoSize = false; } 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     base.OnPaint(e); 
     int h = this.ClientSize.Height - 2; 
     Rectangle rc = new Rectangle(new Point(0, 1), new Size(h, h)); 
     ControlPaint.DrawCheckBox(e.Graphics, rc, 
      this.Checked ? ButtonState.Checked : ButtonState.Normal); 
    } 
} 
+0

唯一的問題是,在Windows 7中,複選框的樣式與系統默認的 – 2013-01-14 15:55:16

+3

不匹配,系統調用'base.OnPaint(e);'也會在屏幕上留下一些像素,我寧願調用'e.Graphics .Clear(this.BackColor);' – 2013-01-14 16:00:24

+0

非常好的解決方案,例如當我在每個2個字體點放大字體時,複選框的右側重疊一點點右側的文本。 – Samuel 2015-03-12 00:48:05

-2

爲了能夠調整複選框,您必須將resize屬性設置爲false。我曾嘗試:

Public Sub New() 
    Me.Text = "Approved" 
    Me.TextAlign = ContentAlignment.MiddleLeft 
    Me.FlatStyle = Windows.Forms.FlatStyle.Flat 
End Sub 

和:

Me.Height = 24 
    Me.Width = 200 
    Dim squareSide As Integer = 20 
    Dim rect As New Rectangle(New Point(0, 1), New Size(squareSide, squareSide)) 
    ControlPaint.DrawCheckBox(
     e.Graphics, rect, If(Me.Checked, ButtonState.Checked, ButtonState.Normal)) 
    Me.FlatStyle = FlatStyle.Flat 

End Sub 

沒有奏效,

還我試圖覆蓋平板方式,但它不是重寫,能...任何想法?

+3

CheckBox Windows窗體控件中沒有「調整大小」屬性。 – AnAurelian 2012-10-22 12:23:37

12

Properties窗口中有AutoSize選項;如果通過將其更改爲False來關閉該功能,則可以修改CheckBox的尺寸。

+2

我將AutoSize設置爲false,但無法更改大小。 – bebosh 2015-03-04 09:33:26

+0

你不會有一個更大的複選框,你只有它的邊框更大,所以它會變得更容易點擊 – 0014 2017-05-30 18:12:27

1

如果有人需要VB.NET代碼,我將這個代碼改編成它。我沒有在課堂上使用AutoSize。一旦項目建立,應該將控件添加到工具箱中。您可以將AutoSize設置爲False,就像您使用其他控件一樣。

如果它很重要,我只是把我用它在形式的End Class下面的類代碼。

要澄清一下AutoSize呢,這個新的控制的優點是「框」部分複選框可以做得更大。在正常複選框中,您不能更改方框部分。

我看到的這個新控件的唯一缺點是,當您調整它的大小時,如果左對齊,則該部分會超出文本;使用TextAlign屬性修復此問題。

Public Class NewCheckBox 
    Inherits CheckBox 

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 
     MyBase.OnPaint(e) 

     'Make the box you check 3/4 the height 
     Dim boxsize As Integer = Me.Height * 0.75 
     Dim rect As New Rectangle(
      New Point(0, Me.Height/2 - boxsize/2), 
      New Size(boxsize, boxsize) 
     ) 

     ControlPaint.DrawCheckBox(e.Graphics, rect, If(Me.Checked, ButtonState.Checked, ButtonState.Normal)) 
    End Sub 
End Class 
5

C#版本,從a forum.codecall.net topic

class BigCheckBox : CheckBox 
    { 
     public BigCheckBox() 
     { 
      this.Text = "Approved"; 
      this.TextAlign = ContentAlignment.MiddleRight;    
     } 

     public override bool AutoSize 
     { 
      set { base.AutoSize = false; } 
      get { return base.AutoSize; } 
     } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
      base.OnPaint(e); 

      this.Height = 100; 
      this.Width = 200; 
      int squareSide = 80; 

      Rectangle rect = new Rectangle(new Point(0, 1), new Size(squareSide, squareSide)); 

      ControlPaint.DrawCheckBox(e.Graphics, rect, this.Checked ? ButtonState.Checked : ButtonState.Normal); 
     } 
    } 
+0

我有這個工作,但有沒有辦法設置平面樣式? – Ross 2017-10-01 09:42:27

0

使用不同的控制(例如,標籤或按鈕),只是編程onclick事件改變其外觀以可接受的方式。