2016-02-07 8 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); 
} 

をあなたがする必要があります。

  • FlatStyle = FlatStyle.Flat
  • を設定 Apperance = Appearance.Button
  • を設定
  • セット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); 
    } 
} 

あなたは...コントロールやフォントのサイズをtweekする必要があり、あなたがしたい場合はTextAlignCheckAlign性質を称えるために、コードを拡大することができます。

そして、あなたは3ステート制御を必要とする場合は、あなたがオリジナルより良く見える1を考える場合は特に、第3の状態の外観を表示するコードを適応させることができます。..

+0

私はこの最後のコードは私がやろうとしているものだと思いますが、何が出てくるのかは、どのような種類のやりとりも許さない「フラット」ボタンの上に色付きの境界線がある正方形だけです。 – user5894584

+0

私は 'Checked'のチェックを忘れました。更新しました。それ以外はここで動作します.. – TaW

+0

申し訳ありませんが、まだ動作しません。なぜそれをボタンと見なす必要がありますか? – user5894584

3

独自のチェックボックスを作成する必要があります。 OnClickイベントでチェックサム画像とチェックサム画像の間を切り替える青い四角形(Buttonから継承する可能性あり)をカスタムコントロールで作成し、その横にラベルを配置します。

関連する問題