2011-07-19 40 views
20

我似乎無法阻止我的形式在我Group Box檢查單選按鈕之一:如何防止在表單加載時檢查RadioButton?

enter image description here

正如設計師表示,沒有單選按鈕檢查那裏。

下面是關於這個簡單表單的所有代碼。沒有任何要求在此處或在表單的設計人員中檢查單選按鈕

問:有沒有一種方法,以防止任何單選按鈕時從被檢查的形式加載?

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:問題是顯示在表單時radioButton1被檢查:

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

添加一些單選按鈕,並使其不可見:) –

+1

LOL。我寧願控制我的代碼! – jp2code

回答

24

確保您的單選按鈕不是第一個tabIndex = 0的控制。使OK按鈕tabindex = 0,然後是單選按鈕。

+0

啊哈!我知道它必須是這樣簡單的東西!謝謝。 – jp2code

+2

@ jp2code或在設計器中將單選按鈕的AutoCheck屬性設置爲false,然後在構造函數中將它們變爲true。這似乎也起作用。 – LarsTech

+1

還有更簡單的解決方案。檢查我的答案區域中的評論。 – SaravananArumugam

14

在設計模式中,您會發現AutoCheck屬性設置爲true。把它變成假。它不會被檢查,直到您在運行期間手動選擇它。

+2

我試圖編輯我的內容,但它不會讓我。將** AutoDrop **和** AutoCheck **保持爲true會做你想做的。 – SaravananArumugam

+0

我想這會工作。通過這樣做,我必須在'clickEvent'處理程序的代碼中明確檢查'Radio Button',對吧? – jp2code

+1

是的。您可以通過代碼或通過用戶界面檢查單選按鈕。您可以處理CheckedChanged事件中的更改。 – SaravananArumugam

1

表單加載後,將checked狀態設置爲false。把它放在顯示的事件中,看看它是否工作。

+0

這是我試圖避免的一種蠻力技術。 LarsTech的原始答案是我所需要的最快速度,儘管SaravananArumugam可能比編碼者的觀點更爲正確。 – jp2code

1

我認爲這可能實際上是VS中的錯誤。我使用的是2010 SP1,但OP沒有提及他們使用的是哪個版本。

在我的一個應用程序中發生了相同的幻像。

將兩個單選按鈕的自動切換更改爲False,構建了該應用程序。現在未選中受影響的按鈕,但現在選擇了以前未受影響的其他按鈕。

重新回到代碼中,並在原始按鈕上將autocheck設置爲true,然後從true切換到false,然後再次在新受影響的按鈕上切換。重新運行,應用程序很好;沒有選擇按鈕。

當我第一次檢查原始單選按鈕的tabIndexes時,它們被設置爲tabIndex 0;我改變了,所以也可能是混合的一部分。

+0

我沒有提到它,但它確實有'visual-studio-2010'標籤。此處的版主會責罵用戶發佈帶有標籤的問題。愚蠢的StackOverflow規則,我想。 – jp2code

+0

Eep - 好點;對不起,我錯過了。 – gorlaz

2

在屬性中設置TabStop=False

相關問題