【说明下界面上要用到的控件:1个TextBox,一个Button,16个CheckBox】
一个TextBox 输入一个由1和0组成的16位值(例如:1001110011001101)  然后点击“确定”按钮  16个CheckBox的状态会发生正确的变化
举个例子: 例如在TEXTBOX中输入1000000000000001 然后点击“确定”按钮,那么16个ChkckBox中,两边的ChkckBOX会为选中状态 中间的那些为未选中状态。(既1为选中状态,0为未选中状态)
请问这个功能应该如何实现,希望高手指点一下,感激不尽!!!
PS:因为TEXTBOX得值为STRING型的,应该转换成什么类型的才能容下这么大的数,希望能写出代码,感激不尽!!!

解决方案 »

  1.   

    假设文本框ID为TextBox1,CHECKBOX的ID为CHECKBOX0,CHECKBOX2,,,CHECKBOX15
    string strValue = TextBox1.Text;
                char[] chrValue = strValue.ToCharArray();
                for (int i = 0; i < chrValue.Length; i++)
                {
                    CheckBox chk = this.FindControl("checkbox" + i.ToString()) as CheckBox;
                    if (chk != null)
                    {
                        if (chrValue[i].ToString() == "1")
                            chk.Checked = true;
                        else
                            chk.Checked = false;
                    }
                }
      

  2.   

    1 直接截取String的位来控制 CheckBox2 转换为byte 用BitArray来做
      

  3.   

    数组
    空间数组
    16位  放入16位长度的数组中
    checkbox  放入checkboxlist中
    然后  数组下标 对应checkboxlist下标   
      

  4.   


    请问怎么样截取String的位来控制 CheckBox 因为我还要实现一个功能 就是这个功能的相反, 用CheckBox去控制Text 好像应该用截取String的位的方法
      

  5.   

    PS:因为TEXTBOX得值为STRING型的,应该转换成什么类型的才能容下这么大的数,希望能写出代码,感激不尽!!!
    就算转成10进制,最大也才65535,一点也不大啊。没有特殊要求的话,存varchar就好了,不用转其他类型
      

  6.   

    List<CheckBox> lt=new List<CheckBox>();
    lt.Add(CheckBox01);
    lt.Add(CheckBox02);
    ...string sz=textbox.text;
    for(int i=0;i<sz.length;i++)
    {
        if(sz[i]=='1')
        {
            lt[i].Checked=true;
        }
        else
        {
            lt[i].Checked=false;
        }
    }
      

  7.   

    当然 你还需要自己添加TEXTBOX的格式判断 判断是否输入的是正确的格式
      

  8.   

     string strValue = "";
                
                for (int i = 0; i < 16; i++)
                {
                    CheckBox chk = this.FindControl("checkbox" + i.ToString()) as CheckBox;
                    if (chk != null)
                    {
                        if (chrValue[i].ToString() == "1")
                            strValue += "1";
                       
                    }
                    else
                        strValue += "0";
                }
      

  9.   

     string t=textBox1.Text;
                int j = 1;//checkbox的下标值
                for (int i = 0; i < t.Length; i++)
                {
                    string key = "checkBox" + j;
                    if (t[i].ToString() == "1")
                    {
                        
                        CheckBox c = this.Controls[key] as CheckBox;
                        c.Checked=true;
                    }
                    else
                    {
                        CheckBox c = this.Controls[key] as CheckBox;
                        c.Checked = false;
                    }
                    j++;
                }
      

  10.   


    if (chk.Checked)
          strValue += "1";
      

  11.   


    string str=xx.text.trim().tostring()
    list<string> list1=new list<string>();
    for(int i=0;i<str.length;i++)
    {
    list1.add(str.substring(i,1))
    }for (int j=0;j<list1.count;j++)
    {
    CheckBox xx=(CheckBox)xxx+i.tostring()xx.check=list1[j]
    }
    大概这样
      

  12.   


    CheckBox的命名要这样的形式 CheckBox1 CheckBox2 CheckBox3
    如果不是这样的形式,你就要把CheckBox的名字放进一个string[]数组里面,在后面循环时赋值
    string str=xx.text.trim().tostring()
    list<string> list1=new list<string>();
    for(int i=0;i<str.length;i++)
    {
    list1.add(str.substring(i,1))
    }for (int j=0;j<list1.count;j++)
    {
    CheckBox xx=(CheckBox)this.FindControl(string.Format("CheckBox{0}", j)xx.check=list1[j]
    }
      

  13.   

    string strValue = TextBox1.Text; 
    char[] chrValue = strValue.ToCharArray(); 
    for (int i = 0; i < chrValue.Length; i++) 

      CheckBox chk = this.FindControl("checkbox" + i.ToString()) as CheckBox; 
      if (chk != null) 
      { 
          chk.Checked =bool.Parse(charValue[i]); 
      } 
     } 
      

  14.   

     string strValue = "";
                char[] chrValue = strValue.ToCharArray();
                for(int i=0;i<chrValue.Length;i++)
                {
                    CheckBox chk = this.FindControl("checkbox" + i.ToString()) as CheckBox;
                    if (chk != null)
                    {
                        chk.Checked =bool.Parse(chrValue[i].ToString());
                    }
                }
                for (int i = 0; i < 16; i++)
                {
                    CheckBox chk = this.FindControl("checkbox" + i.ToString()) as CheckBox;
                    if (chk != null)
                    {
                        strValue += chk.Checked ? "1" : "0";
                    }
                } 
      

  15.   


    不能那么马虎,所以决定写个精确的
     <div class="Br"> 

            <asp:CheckBox ID="CheckBox1" runat="server" />
              <asp:CheckBox ID="CheckBox2" runat="server" />
                <asp:CheckBox ID="CheckBox3" runat="server" />
                  <asp:CheckBox ID="CheckBox4" runat="server" />
                    <asp:CheckBox ID="CheckBox5" runat="server" />
                      <asp:CheckBox ID="CheckBox6" runat="server" />
                        <asp:CheckBox ID="CheckBox7" runat="server" />
                          <asp:CheckBox ID="CheckBox8" runat="server" />
                            <asp:CheckBox ID="CheckBox9" runat="server" />
                              <asp:CheckBox ID="CheckBox10" runat="server" />
                              
                              
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            
        </div> protected void Button1_Click(object sender, EventArgs e)
        {string str=TextBox1.Text.Trim().ToString();
    List<string> list1 = new List<string>();
    for(int i=0;i<str.Length-1;i++)
    {
    list1.Add(str.Substring(i,1));
    }for (int j=1;j<9;j++)
    {
        CheckBox xx = (CheckBox)this.FindControl(string.Format("CheckBox{0}", j));
        if (xx!=null)
        {
            xx.Checked = list1[j].ToString() == "1" ? true : false;
        }
        
    }
        }
      

  16.   


    泛型要
    using System.Collections.Generic;
      

  17.   

    可以更简单的,不需要list protected void Button1_Click(object sender, EventArgs e)
        {string str=TextBox1.Text.Trim().ToString();for(int i=1;i<=str.Length;i++)
    {
    CheckBox xx = (CheckBox)this.FindControl(string.Format("CheckBox{0}", i));
    if (xx != null)
    {
        xx.Checked = str.Substring(i-1, 1).ToString() == "1" ? true : false;
    }
    }    }
      

  18.   

    本帖最后由 ojlovecd 于 2009-09-21 14:03:27 编辑
      

  19.   

    请问这个功能应该如何实现,希望高手指点一下,感激不尽!!! 上面给你实现的够多了.略过PS:因为TEXTBOX得值为STRING型的,应该转换成什么类型的才能容下这么大的数,希望能写出代码,感激不尽!!!16位的可以用long来存,
    不过始果只是实现你的功能,改为字符串最合理了.上面的大多都是
      

  20.   

    创建Default5.aspx:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx.cs" Inherits="Default5" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
            Text="生成checkbox" />
    &nbsp;<asp:Button ID="Button2" runat="server" onclick="Button2_Click" 
            Text="计算textbo" />
    &nbsp;<asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="检查位数" />
        <br />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </form>
    </body>
    </html>
    using System;
    using System.Linq;
    using System.Web.UI;
    using System.Web.UI.WebControls;public partial class Default5 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LoadCheckBoxes(false);
        }    private void LoadCheckBoxes(bool isLoadCompleted)
        {
            this.PlaceHolder1.Controls.Clear();
            for (var i = 0; i < Data.Length; i++)
            {
                var c = new CheckBox();
                c.ID = "chk" + i.ToString();
                this.PlaceHolder1.Controls.Add(c);
                if (isLoadCompleted)
                {
                    c.Text = "第" + i.ToString() + "位";
                    c.Checked = Data[i] == '1';
                }
                this.PlaceHolder1.Controls.Add(new LiteralControl { Text = "<br />" });
            }
        }    private char[] Data
        {
            get
            {
                var x = ViewState["data"];
                if (x == null)
                    return new char[0];
                else
                    return (char[])x;
            }
            set
            {
                ViewState["data"] = value;
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            var cs = this.TextBox1.Text.Trim().ToCharArray();
            if (cs.Any(c => c != '0' && c != '1'))
                ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert('文本框中只能有0和1。');", true);        Data = cs;
            LoadCheckBoxes(true);
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            var len = this.TextBox1.Text.Trim().Length;
            if (len != 16)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "",
                    string.Format("alert('文本框中应该输入16个字符,现在只有{0}个。');", len), true);
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            this.TextBox1.Text = string.Empty;
            for (var i = 0; i < Data.Length; i++)
            {
                var c = (CheckBox)this.PlaceHolder1.FindControl("chk" + i.ToString());
                Data[i] = c.Checked ? '1' : '0';
                this.TextBox1.Text += Data[i];
            }
        }
    }
      

  21.   

    如果这种功能也算一个客户需求,那么不值一分钱。所以这个demo只是演示如何写出程序,而值钱的程序一定需要后台去处理的。
      

  22.   

    例如,让我们做一个测试,在页面上随便放一个Button来测试(相当于随便一个程序员增加了一点点新的功能)。你写的程序能够保持状态么?能不能保持状态,这就是真正值得在乎的功能。
      

  23.   

    呵呵,我的当然不能,因为我写的是基于winform的例子
    楼主没有说明他要的是winform还是webform,由于C#版问winform的较多,所以我就随手写了个winform的
    我和你的出发点是一样的,就是演示如何写出程序
    但如何写出值钱或者有价值的程序,不在我回答问题的范畴之内
      

  24.   

    健哥也不必太自谦
    大家在沟通中互相补益,BrainStorm不就是这么来的。
    经历中午的签名门事件之后,sp1234不是刷得就把签名改了么?
      

  25.   

    坦白说我一直专注于sp1234回答的问题的本身以及他的分析思路。对于签名栏写些什么倒是不太留意。那句话放在其签名栏本身是没什么问题的,但是被人复制在帖子里,那句话有了具体语境从而产生不太和谐的感觉了。老妖我不太喜欢那种楼主在提问时他自己不回答也不善意帮忙顶贴反而对楼主和答题人恶意攻击嘲讽的人,碰见这种人我基本上是见一个骂一个。当然,事后证明是一场误会。我不也表示歉意么?就连sp1234也善意的改了一下签名。
      

  26.   

    <script type="text/javascript" language ="javascript">
    function chekall()
    {
    var checkb='';
    var j=0;
    var textj=document.getElementById("Text1").value;
    checkb=document.getElementsByTagName("input");
    for(i=0;i<checkb.length;i++)
    {
      
     if(checkb[i].type=="checkbox")
     {
        alert(textj.substring(j,j+1));
        if(textj.substring(j,j+1)=='0')
        checkb[i].checked=false;
        else
        checkb[i].checked=true;
        j=j+1;
     }
     else
     { 
     }
    }
    }
    </script>
      

  27.   

    问题解决了!!感谢各位的回答!!!我做的是WINFORM 但WEB的答案也让我学到了不少!!扩充了知识面  再次感谢!!!