2013-04-04 12 views
9

nó có văn bản, hình ảnh và sau đó chọn hộp kiểm,cách thay đổi hình ảnh kiểm tra trên hộp kiểm

Tôi muốn sử dụng hình ảnh tốt hơn cho séc nhưng không thể tìm cách thay đổi mục đã chọn và bỏ chọn hình ảnh

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; 

ai biết điều đó không yêu cầu tôi viết kiểm soát của riêng mình?

+4

WPF hoặc Winform? Bạn có muốn thay đổi kiểu chenkbox không? – KF2

+0

có vẻ giống như WinForms. – Dilshod

+0

Tôi đã chỉnh sửa tiêu đề của bạn. Vui lòng xem, "[Câu hỏi có nên bao gồm" thẻ "trong tiêu đề của họ không?] (Http://meta.stackexchange.com/questions/19190/)", trong đó sự đồng thuận là "không, họ không nên". –

Trả lời

8

Nếu bạn đang tìm cách thực hiện điều này trong Winforms, câu trả lời đơn giản là tạo một hộp kiểm mới có nguồn gốc từ CheckBox, sau đó ghi đè phương thức OnPaint.

Đây là một complete tutorial về cách tạo hộp kiểm tìm kiếm tùy chỉnh.

-1

Một đơn giản:

ghi đè kiểm tra hộp OnPaint(PaintEventArgs e) như sau:

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

Nhưng nếu bạn muốn có một tốt nhất bạn phải sử dụng wpf CheckBox ControlTemplate Example

0

Tôi đã có khoảng một này theo cách khác, tôi sử dụng hình nền và căn giữa nó, sau đó thay đổi hình ảnh chính bất cứ khi nào kiểm tra được thay đổi. điều này xuất hiện như tôi muốn.

Có vấn đề với điều này, hình nền nếu kích thước không phù hợp với gạch dưới hình ảnh kiểm tra và do đó sẽ không có vẻ đúng.

giải pháp đúng là mô tả icemanind.

5

Đối với những ai không muốn ghi đè OnPaint, có một giải pháp thay thế:

  1. Thêm một điều khiển ImageList và điền nó với hình ảnh để phản ánh kiểm tra/tiểu bang không được kiểm soát.
  2. Thiết lập thuộc tính AppearanceCheckbox kiểm soát của bạn để Button (để thoát khỏi biểu tượng CheckBox tiêu chuẩn)
  3. Set FlatStyle tài sản của mình để Flat (để điều khiển không thực sự trông giống như một nút).
    Lưu ý: Bạn cũng có thể kiểm tra nhóm thuộc tính 'FlatAppearance' của nó. Cụ thể là CheckedBackColor, MouseDownBackColor, MouseOverBackColor, tức là đặt tất cả thành giá trị Control.
  4. Đặt Checkbox kiểm soát của ImageList thuộc tính vào tên kiểm soát ImageList của bạn.
  5. Đặt Checkbox thuộc tính kiểm soát ImageindexImageAlign thuộc tính để phản ánh trạng thái hiện tại của nó.
  6. Cuối cùng và quan trọng nhất là đặt Checkbox thuộc tính của điều khiển TextImageRelation (giá trị này sẽ không cho phép văn bản và hình ảnh trùng lặp trừ khi bạn muốn chúng). I E. Giá trị ImageBeforetext đại diện cho vị trí biểu tượng Hộp kiểm chung.

Bây giờ điều duy nhất còn lại để làm là thay đổi hình ảnh khi nhà nước thay đổi, SMTH như thế này:

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