c#用append追加字符串,为什么追加字符出现在显示textbox的左边?

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:49:18
思路:在一个groupbox上有很多checkbox选项,如:A/B/C/D/E/F等,我用一个foreach遍历该groupbox上的所有checkbox控件,如果是选中状态,将该checkbox的内容显示在一个叫txtZhunJia的文本框里。代码如下:
private void checkboxState() //遍历 groupBox2上所有的checkbox控件
{

StringBuilder sb=new StringBuilder();
foreach (Control con in this.groupBox2.Controls)
{
if (con.GetType().ToString() == "System.Windows.Forms.CheckBox")
{
if ((con as CheckBox).CheckState == CheckState.Checked)
{
con.ForeColor = Color.Red;
sb.Append(con.Text.ToString());
}
else
{
con.ForeColor = Color.Black;
}
}
}
txtZhunJia.Text = sb.ToString();
}
我想要的结果

groupbox中后加上去的控件是放在前面的,比如
先放进A,此时groupBox1.Controls[0]就是A;
再放进B,此时groupBox1.Controls[0]是B,groupBox1.Controls[1]是A;
所以你可以改变控件放入的顺序,如第一个放进F,第二个E...
或者改用insert
sb.Insert(0,con.Text.ToString());
或者直接用for语句逆序遍历
for (int i = groupBox2.Controls.Count-1; i >= 0; i--)
{
CheckBox con = (CheckBox)groupBox2.Controls[i];
...
}

看来你遍历的顺序是FEDCBA,当然也是这个结果。

你试试改改checkbox的TabIndex属性,使它们按ABCDEF从小到大。

如还不行,那就只能取出来再重新排序了

为了避免和控件的顺序有关系,我建议你先将控件的Text放到char[]数组中对它排序后再转换成字符串。给你个例子:
static void Main(string[] args)
{
char[] a = new char[6];
a[0] = 'B'; a[1] = 'C';
Array.Sort(a);
string str = new string(a);
Console.WriteLine(str.Trim((char)0));//去掉值为0的字符
Console.Read();
}