2014-07-02 194 views
1

我使用下面的代碼來獲得用戶輸入的快速簡單的方法,在這種情況下,從一組單選按鈕中選擇一個選項。Radibuttons not showing up

internal static int multipleChoice(IEnumerable<string> options, int indexOfDefault, string header) 
{ 
    string[] input = options.ToArray(); 
    int result = indexOfDefault; 
    Form promt = new Form(); 
    promt.Text = header; 
    promt.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    List<RadioButton> buttonsInForm = new List<RadioButton>(); 

    int maxPerColumn = 6; 
    int column = 0; 
    int line = 0; 

    int hSpace = 25; 
    int vSpace = 180; 

    for(int i = 0; i < input.Length; i++) 
    { 
     RadioButton btn = new RadioButton(); 
     if(i == indexOfDefault) 
      btn.Checked = true; 

     btn.Text = input[i]; 
     btn.Location = new System.Drawing.Point((column + 1) * vSpace, (line + 1) * hSpace); 
     line++; 
     if(line > maxPerColumn) 
     { 
      line = 0; 
      column++; 
     } 

     btn.CheckedChanged += 
      (sender, e) => 
     { 
      RadioButton caller = (RadioButton)sender; 
      if(!caller.Checked) 
       return; 

      result = buttonsInForm.IndexOf(caller); 
     }; 

     buttonsInForm.Add(btn); 
    } 

    promt.Width = column * vSpace + 150; 

    if(buttonsInForm.Count < maxPerColumn) 
     promt.Height = (buttonsInForm.Count + 2) * vSpace; 
    else 
     promt.Height = (maxPerColumn + 2) * vSpace; 

    promt.Controls.AddRange(buttonsInForm.ToArray()); 
    promt.ShowDialog(); 

    return result; 
} 

調用示例

List<string> whatEv = new List<string>(); 
whatEv.Add("one"); 
whatEv.Add("two"); 
whatEv.Add("three"); 
string foo = promts.multipleChoice(whatEv, 1, "form title"); 

的問題是:
使用時,它表現出的形式,但沒有單選按鈕(也按預期形式的大小是不行的,但這是爲我以後)
我已經通過調試器和所有按鈕看起來很好,通過循環。
另外我沒有收到任何異常或編譯器警告。
我的假設是我忘記了東西在for循環內部設置的東西,但什麼?

+1

「vspace」計算似乎不正確。只是爲了測試目的改變'int vspace = 50'。 – Hassan

+0

@HassanNisar是的,這是問題,格蘭特就此回答了一個答案。 – Mark

回答

2

我運行了你的代碼來測試它。單選按鈕在您的Form上。他們只是從右側推開。

放在下面的行斷點:

btn.Location = 
    new System.Drawing.Point((column + 1) * vSpace, (line + 1) * hSpace); 

和檢查的(column + 1) * vSpace值。你必須改正它正在做的計算,或者擴大Form

+0

就這麼簡單。我想,我的表格夠寬。我也一直忘記,winfroms只是不在乎或告訴你,如果你把東西放在遙不可及的地方。 – Mark

+0

沒錯,WinForms沒有任何問題,只是將屏幕上的東西從屏幕上移開。 :) –