我使用下面的代碼來獲得用戶輸入的快速簡單的方法,在這種情況下,從一組單選按鈕中選擇一個選項。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循環內部設置的東西,但什麼?
「vspace」計算似乎不正確。只是爲了測試目的改變'int vspace = 50'。 – Hassan
@HassanNisar是的,這是問題,格蘭特就此回答了一個答案。 – Mark