2011-07-19 30 views
20

tôi dường như không thể ngăn chặn hình thức của tôi từ kiểm tra một trong những Đài phát thanh Buttons trong Group Box tôi:Làm cách nào để ngăn không cho RadioButton được kiểm tra khi Biểu mẫu tải?

enter image description here

Như đã trình bày trong các nhà thiết kế, không có Đài phát thanh Buttons được kiểm tra ở đó.

Dưới đây chỉ là về tất cả mã cho biểu mẫu đơn giản này. Không có gì gọi cho Nút radio để được chọn tại đây hoặc trong nhà thiết kế của biểu mẫu.

Q: Có cách nào để ngăn bất kỳ Nút radio nào không được kiểm tra khi biểu mẫu tải không?

public ValueTypeSelector() { 
    InitializeComponent(); 
    radioButton1.Checked = false; 
    radioButton2.Checked = false; 
    radioButton3.Checked = false; 
    radioButton4.Checked = false; 
    radioButton5.Checked = false; 
    radioButton6.Checked = false; 
    button1.Enabled = false; 
    button1.Click += clickEvent; 
    button2.Click += clickEvent; 
    radioButton1.Click += clickEvent; 
    radioButton2.Click += clickEvent; 
    radioButton3.Click += clickEvent; 
    radioButton4.Click += clickEvent; 
    radioButton5.Click += clickEvent; 
    radioButton6.Click += clickEvent; 
} 

void OnShow(object sender, EventArgs e) { 
    foreach (RadioButton rad in Controls) { 
    if (rad.Checked) { 
     Console.WriteLine("WTF?"); 
    } 
    } 
} 

void clickEvent(object sender, EventArgs e) { 
    RadioButton rad = sender as RadioButton; 
    if (rad != null) { 
    if (rad.Checked) { 
     if (rad == radioButton1) { 
     DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD 
     } else if (rad == radioButton2) { 
     DataType = TableDataType.Character; 
     } else if (rad == radioButton3) { 
     DataType = TableDataType.DateTime; 
     } else if (rad == radioButton4) { 
     DataType = TableDataType.Decimal; 
     } else if (rad == radioButton5) { 
     DataType = TableDataType.Integer; 
     } else if (rad == radioButton6) { 
     DataType = TableDataType.String; 
     } else { 
     return; 
     } 
     button1.Enabled = true; 
    } 
    } else if (sender == button1) { 
    DialogResult = DialogResult.OK; 
    Close(); 
    } else if (sender == button2) { 
    DialogResult = DialogResult.Cancel; 
    Close(); 
    } 
} 

UPDATE: Vấn đề là radioButton1 được kiểm tra khi biểu mẫu được hiển thị:

 if (rad == radioButton1) { 
     DataType = TableDataType.Boolean; // <= HERE IS THE PROBLEM! FIRES ON FORM LOAD 
     } else if (rad == radioButton2) { 
+0

thêm một số nút radio và làm cho nút ẩn đi :) –

+1

LOL. Tôi muốn kiểm soát mã của mình! – jp2code

Trả lời

24

Hãy chắc chắn rằng radiobuttons của bạn KHÔNG có những tabIndex đầu tiên = 0 điều khiển. Làm cho nút OK tabindex = 0, tiếp theo là các nút tắt.

+0

Ah-ha! Tôi biết nó phải là một cái gì đó đơn giản như thế! Cảm ơn. – jp2code

+2

@ jp2code hoặc biến các thuộc tính AutoCheck của các nút vô tuyến thành false trong trình thiết kế, sau đó chuyển chúng thành true trong hàm tạo. Điều đó dường như cũng hiệu quả. – LarsTech

+1

Thậm chí còn có giải pháp đơn giản hơn cho nó. Kiểm tra nhận xét trong vùng trả lời của tôi. – SaravananArumugam

14

Trong chế độ thiết kế, bạn sẽ tìm thấy thuộc tính AutoCheck được đặt thành true. Chỉ cần biến nó thành false. Nó sẽ không được kiểm tra cho đến khi bạn chọn nó theo cách thủ công trong suốt thời gian chạy.

+2

Tôi đang cố gắng chỉnh sửa nội dung của mình, nhưng nó sẽ không cho phép tôi. Giữ ** AutoDrop ** và ** AutoCheck ** thành true sẽ làm những gì bạn muốn. – SaravananArumugam

+0

Tôi cho rằng điều đó sẽ hoạt động. Bằng cách đó, tôi phải kiểm tra rõ ràng nút 'Radio Button' trong mã trong trình xử lý 'clickEvent', đúng không? – jp2code

+1

Có.Bạn có thể kiểm tra Nút radio thông qua mã hoặc thông qua giao diện người dùng. Bạn có thể xử lý sự thay đổi trong sự kiện CheckedChanged. – SaravananArumugam

1

Đặt trạng thái đã chọn thành false sau khi tải biểu mẫu. Đặt điều này trong sự kiện được hiển thị và xem nó có hoạt động hay không.

+0

Đó là một kỹ thuật bạo lực tôi đã cố gắng tránh. Câu trả lời ban đầu của LarsTech là nhanh nhất để làm những gì tôi cần, mặc dù SaravananArumugam có lẽ chính xác hơn từ quan điểm của Coder. – jp2code

1

Tôi nghĩ rằng điều này thực sự có thể là một lỗi trong VS. Tôi đang sử dụng 2010 SP1 nhưng OP không đề cập đến phiên bản mà họ đang sử dụng.

Có cùng một ảo ảnh xảy ra trong một trong các ứng dụng của tôi.

Đã thay đổi Autochecked cho hai nút radio thành False, đã tạo ứng dụng. Các nút bị ảnh hưởng hiện không được chọn, nhưng các nút khác trước đây không bị ảnh hưởng bây giờ đã được chọn.

Đã quay lại mã và biến autocheck thành true trên các nút gốc, sau đó chuyển từ true thành false và ngược lại trên các nút mới bị ảnh hưởng. Chạy lại và ứng dụng đã ổn; không có nút nào được chọn.

Khi lần đầu tiên tôi kiểm tra tabIndex cho các nút radio ban đầu, chúng được đặt thành tabIndex 0; mà tôi đã thay đổi, do đó cũng có thể là một phần của hỗn hợp.

+0

Tôi đã không đề cập đến nó, nhưng nó có thẻ 'visual-studio-2010'. Những người kiểm duyệt ở đây mắng mọi người để đăng câu hỏi với các thẻ trong chủ đề. Silly StackOverflow quy tắc, tôi nghĩ. – jp2code

+0

Eep - điểm tốt; xin lỗi tôi đã bỏ lỡ điều đó. – gorlaz

2

Đặt TabStop=False trong thuộc tính.

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