2009-09-03 29 views
23

Có cách nào để hủy bỏ một sự thay đổi RadioButton hoặc CheckBox trong tiểu bang trước khi nó thay đổi?Làm thế nào để hủy bỏ RadioButton hoặc CheckBox kiểm tra thay đổi

Tôi đã hy vọng cho một sự kiện đơn giản như CheckedChanging hoặc BeforeCheckedChange.

Tôi thực sự muốn tránh nghe các nhấp chuột và nhấn phím. Nhưng nếu bạn biết một cách đáng tin cậy đã được chứng minh bằng cách sử dụng nhấp chuột và nhấn phím, hãy giải thích nó.

Tôi đang sử dụng .NET 2.0 với các điều khiển Winforms chuẩn.

Trả lời

35

Đặt AutoCheck thành false.

Override OnClick để kiểm tra thủ công hộp kiểm

+1

Tôi chưa bao giờ biết AutoCheck tồn tại. Đây chính là điều tôi muốn, cảm ơn. –

+0

Tôi tự hỏi tại sao điều này khác với một số điều khiển khác, nơi bạn sẽ có một cái gì đó giống như một sự kiện 'CheckedChanging' với một đối số sự kiện nơi bạn có thể đặt' e.Cancel = true; 'nếu bạn muốn hủy thay đổi của' Đã kiểm tra' bất động sản. – roncli

+2

trong trường hợp radiobutton có lưu ý quan trọng từ doc: 'Nếu thuộc tính AutoCheck được đặt thành false, một nhóm các điều khiển RadioButton sẽ không hoạt động như một nhóm loại trừ lẫn nhau và thuộc tính Đã kiểm tra phải được cập nhật trong mã' – oleksa

17

Mã bản demo của autocheck, thêm một dấu nhắc xác nhận để Nhấn vào sự kiện.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.checkBox1.AutoCheck = false; 
     this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click); 
    } 

    private void checkBox1_Click(object sender, EventArgs e) 
    { 
     CheckBox checkBox = (CheckBox)sender; 
     if (!checkBox.Checked) 
     { 
      DialogResult dialogResult = MessageBox.Show(
       "Are you sure?", "my caption", 
       MessageBoxButtons.YesNo); 

      if (dialogResult == DialogResult.Yes) 
      { 
       checkBox.Checked = true; 
      } 
     } 
     else 
     { 
      checkBox.Checked = false; 
     } 
    } 
} 
+1

. không gian thanh được nhấn khi điều khiển đã tập trung? – cjbarth

+0

Nếu tôi là người hỏi câu hỏi này, tôi chắc chắn sẽ chấp nhận câu trả lời này là câu trả lời – swdev

1

Tôi sử dụng này để hủy một tấm séc nút radio.

private void radioButton1_MouseClick(object sender, MouseEventArgs e) 
    { 
     RadioButton r = (RadioButton)sender; 
     r.Checked = !(r.Checked); 
    } 
+1

Vấn đề duy nhất tôi có với phương pháp này là nút radio trước đã được bỏ chọn, vì vậy điều này không hoàn toàn hoàn tác cú nhấp chuột. Để làm điều đó, tôi phải thêm một trình xử lý sự kiện cho sự kiện CheckedChanged cho mỗi nút radio và khi một nút radio không được chọn, hãy lưu nút nào được bỏ chọn trong trường hợp tôi cần kiểm tra lại lần nữa để hoàn tác hoàn tác lần nhấp. –

Các vấn đề liên quan