2013-04-04 9 views
9

ma tekst, obraz, a następnie pole wyboru,jak zmienić obraz wyboru na checkbox

chcę używać lepszy obraz do kontroli, ale nie może znaleźć sposób na zmianę sprawdzone i niekontrolowany zdjecia

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; 

Ktoś wie o takim, który nie wymaga od mnie napisania własnej kontroli?

+4

WPF lub WinForm? Czy chcesz zmienić styl chenkbox? – KF2

+0

wygląda jak WinForm. – Dilshod

+0

Zmieniłem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –

Odpowiedz

8

Jeśli szukasz sposobu, jak to zrobić w WinForm, prostą odpowiedzią jest utworzenie nowej klasy checkbox, która wywodzi się z CheckBox, a następnie przesłonięcie metody OnPaint.

Oto complete tutorial, jak utworzyć niestandardowe pola wyboru.

-1

prosta: pudełko OnPaint(PaintEventArgs e) jak poniżej sprawdzić

nadpisania:

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); 

Ale jeśli chcesz mieć dobry trzeba użyć wpf CheckBox ControlTemplate Example

0

Mam wokół tego a w inny sposób, używam obrazu tła i wyśrodkowuję go, a następnie zmieniam główny obraz po każdej zmianie. to wygląda tak, jak chcę.

Wystąpił problem z tym, obraz tła, jeśli nieodpowiedni rozmiar z uwzględnieniem obrazu kontrolnego, a więc nie będzie wyglądać dobrze.

Prawidłowe rozwiązanie jest takie jak opisuje icemanind.

5

Dla każdego, kto że wolą nie zastępują OnPaint, istnieje alternatywne rozwiązanie:

  1. Dodaj kontrolki ImageList i wypełnić go z obrazami w celu odzwierciedlenia sprawdzone/stanach zaznaczone.
  2. Określ Checkbox kontrolki Appearance właściwość Button (aby pozbyć się standardową ikonę CheckBox)
  3. Ustaw swój FlatStyle właściwość Flat (tak, że kontrola nie naprawdę wyglądają jak przycisk).
    Uwaga: Możesz również sprawdzić jego grupę "FlatAppearance". Mianowicie CheckedBackColor, MouseDownBackColor, MouseOverBackColor, tj. Ustawić je wszystkie dla wartości Control.
  4. Ustaw właściwość Checkbox kontrolki na ImageList na nazwę kontrolki ImageList.
  5. Ustaw właściwości Checkbox kontrolek Imageindex i ImageAlign, aby odzwierciedlić ich bieżący stan.
  6. Ostatnia i najważniejsza właściwość Checkbox control control Checkbox (ta wartość nie pozwala na nakładanie się tekstu i obrazu, chyba że tego chcesz). To znaczy. Wartość ImageBeforetext reprezentuje wspólną lokalizację ikony CheckBox.

Teraz jedyną rzeczą do zrobienia jest, aby zmienić obraz, gdy stan jest zmieniany, czymś tak:

private void chkMyCheckBoxWithAnImage_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chkMyCheckBoxWithAnImage.Checked) 
      chkMyCheckBoxWithAnImage.ImageIndex = 1; 
     else 
      chkMyCheckBoxWithAnImage.ImageIndex = 0; 
    } 
Powiązane problemy