2015-09-03 95 views
7

將Gtk#RadioButton class的實例添加到GUI時,它會作爲其單選按鈕組的第一個成員自動選中(「激活」)。如何防止單選按鈕的自動選擇

對於基於GTK,這已被討論在某種程度上in another question,隨着the selected answer要點在於用戶希望一個單選按鈕,以在所有時間來選擇。

我不反對。

不過,我會自動生成我的用戶界面的方式,使每個單選按鈕鏈接到一個數據模型,但沒有一個單選按鈕可以在任何時候,得到一個參考任何其他RadioButton的實例。數據模型確保一直檢查一個單選按鈕。

除了足以匹配用戶的期望外,我認爲這是一種很好的做法,像這樣,數據完整性由數據模型確保,而不是由GUI確保。

不幸的是,Gtk#會自動檢查全部這樣的單選按鈕,因爲它認爲每個單選按鈕是其組中的第一個單選按鈕。爲了將各種單選按鈕添加到同一組中,我必須將組中的第一個單選按鈕傳遞給其他單選按鈕的構造函數 - 我不能像上面指出的那樣,因爲我沒有辦法獲取實例化其他人時對第一個單選按鈕的引用。

將單選按鈕的Active property設置爲false沒有幫助,也沒有調用Toggle method

是否有任何方法來抑制這種自動選擇,可能是通過繼承和覆蓋我找不到的東西呢?或者,是否可以強制CheckButton看起來像一個單選按鈕來達到這個目的?

如果真的是有沒有其他解決辦法,我會嘗試和實施該解決方案在another answer這涉及添加第二個隱藏的單選按鈕,我的每個單選按鈕的建議,但我會找到的生產代碼,非常哈克。

+0

爲什麼你不能只是循環單選按鈕和**取消選中**全部?使用繼承自GtkToggleButton的gtk_toggle_button_set_active().... – ymz

+0

@ymz:因爲按鈕似乎不接受該值。他們確保每組至少有一個按鈕保持被檢查。 –

+0

我通常不會建議這個(作爲官方文檔),但...gtk_toggle_button_toggled可能會訣竅 – ymz

回答

1

Josip解決方案的擴展:創建您自己的單選按鈕小部件,實際上只包含兩個gtk單選按鈕,其中一個總是隱藏。你的工廠然後創建這個,而不是原來的gtk按鈕...

+0

雖然這仍然是hacky,它至少很好地封裝詭異成一個封閉的組件。所以,由於缺乏更好的答案,我會接受這一個。 –

1

單選按鈕與檢查按鈕類似,除了它們被分組以便一次只能選擇一個按鈕。

他們要求一個組正確履行職責。

嘗試下來的解決方案,它不是很冒險,只是嘗試添加一個總是被選中的隱藏單選按鈕。

+0

這可能是一個個人解釋的問題,但我真的懷疑「這不是很冒險」使得使用一個總是隱藏的小部件;) –

+0

沒錯。但如果沒有其他解決方案......就這樣做。 ;) –

+0

醜陋/骯髒的解決方案 - 但實際上想提出一樣沒有任何更好的想法...希望沒有太多的數據來表示... – Aconcagua