//初始化数组
  string[] arrR=new string[3]{"5/8","4/8","3","3"};
  string[] arrM=new string[3]{"12/20","45","50"};
.....
//以Combobox显示为关键字,k1为类型,k2为索引位置
void AnalyCombo(ref string k1,ref int k2,string text)
{
   .....
}
string GetContrnt(string key, int index)
{
  //if key的种类较少,可以用switch,否则用用反射机制
  string[] arr;
  switch(key)
  {
     case "M":
        arr=arrM;
        break;
     .....
     default:
        arr=new strinf[0];
     break;
  }
   return (string)arr[index];
}void Combobox_Change(...)
{
string key="";
int index=0;
 AnalyCombo(key,index,text)
 Text.text=GetContrnt(key,index)
}

解决方案 »

  1.   

    对于R=5/8,4/8,3,3
    string[] strArrayR=R.Split(',');
    对于M=12/20,45,50  
    string[] strArrayM=M.Split(',');
    对于C=2,3,4 
    string[] strArrayC=C.Split(',');转换成数组,相应的操作就简单了。
      

  2.   

    呵呵﹐有個笨辦法﹐用DataTable.呵呵﹐參考一下吧
      

  3.   

    对于R=5/8,4/8,3,3
    string[] strArrayR=R.Split(',');
    对于M=12/20,45,50  
    string[] strArrayM=M.Split(',');
    对于C=2,3,4 
    string[] strArrayC=C.Split(',');在ComboBox的Text值变化时进行处理
    private void comboBox1_TextChanged(object sender, System.EventArgs e)
    {
         if(comboBox1.Text!="")
         {     
    int nIndex=-1;
    try
    {
    nIndex=int.Parse(comboBox1.Text.Substring(1));//Get index
    if(nIndex<=0)
    return;
    }
    catch
    {
    return;
    }; switch(comboBox1.Text[0])
    {
    case "R":
    textBox1.Text=strArrayR[nIndex];
    break;
    case "M":
    textBox1.Text=strArrayM[nIndex];
    break;
    case "C":
    textBox1.Text=strArrayC[nIndex];
    break;
    };
         } 
    }
      

  4.   

    Cannot implicitly convert type 'string' to 'char'
      

  5.   

    Sorry,只是顺手写的,忘了oBox1.Text[0]得到是char类型,,改成如下就行了
    private void comboBox1_TextChanged(object sender, System.EventArgs e)
    {
         if(comboBox1.Text!="")
         {     
    int nIndex=-1;
    try
    {
    nIndex=int.Parse(comboBox1.Text.Substring(1));//Get index
    if(nIndex<=0)
    return;
    }
    catch
    {
    return;
    }; switch(comboBox1.Text[0].ToString())
    {
    case "R":
    textBox1.Text=strArrayR[nIndex];
    break;
    case "M":
    textBox1.Text=strArrayM[nIndex];
    break;
    case "C":
    textBox1.Text=strArrayC[nIndex];
    break;
    };
         } 
    }
      

  6.   

    怎样在form2中得到R,M,C?
    在类Params中:
    string r;
    public string  R
    {     
    get
     {
     return r;
     }
     set
      {
       r=value;
      }
    在form1中,
    Params par = new Params();
    string strr= textBox1.Text.ToString();
    par.R= string.Copy(strr);
    当我用string[] strArrayR=R.Split(',');
    R显示是空的,怎样得到R?
      

  7.   

    The name 'strArrayR' does not exist in the class or namespace 'Menu.Address'
    The name 'strArrayM' does not exist in the class or namespace 'Menu.Address'
    The name 'strArrayC' does not exist in the class or namespace 'Menu.Address'
      

  8.   

    首先确认你的R、M、C每次对应的是一个值吗?
    我上面的做法,以为当输入的时候直接是“5/8,4/8,3,3”、“12/20,45,50”、“2,3,4”。如果每次只输入一个值的话,例如:“5/8”、“4/8”、“3”、“3”,那就更简单了,
    定义个
    ArrayList strArrayR=new ArrayList();//Store R
    //M、C类似于R输入过程进行存储
    Params par = new Params();
    par.R=textBox1.Text.ToString();
    strArrayR.Add(par);
    //M、C类似于上面,稍作修改回显时
    private void comboBox1_TextChanged(object sender, System.EventArgs e)
    {
         if(comboBox1.Text!="")
         {     
    int nIndex=-1;
    try
    {
    nIndex=int.Parse(comboBox1.Text.Substring(1));//Get index
    if(nIndex<=0)
    return;
    }
    catch
    {
    return;
    }; switch(comboBox1.Text[0].ToString())
    {
    case "R":
    Params par=(Params)strArrayR[nIndex]
    textBox1.Text=par.R;
    break;
    case "M":
    ……//类似于R
    break;
    case "C":
    ……//类似于C
    break;
    };
         } 
    }
      

  9.   

    输入的数值是不固定的,在Params下我是这样做:
    string[] strArrayR=r.Split (',');
    string[] strArrayM=m.Split (',');
    string[] strArrayC=c.Split (',');
    R= new System.Collections.ArrayList ();
    M= new System.Collections.ArrayList ();
    C= new System.Collections.ArrayList ();
    for(int i=0;i<strArrayR.Length;i++)
    R.Add (strArrayR[i]);
    for(int i=0;i<strArrayM.Length;i++)
    M.Add (strArrayM[i]);
    for(int i=0;i<strArrayC.Length;i++)
    C.Add (strArrayC[i]);
      

  10.   

    你的程序我看了,首先
    在Params中,基本没什么问题
    string[] strArrayR=r.Split (',');
    string[] strArrayM=m.Split (',');
    string[] strArrayC=c.Split (',');R= new System.Collections.ArrayList ();
    //如果想清空,用R.Clear(),如果是想初始化,则不必了,以下同理
    M= new System.Collections.ArrayList ();
    C= new System.Collections.ArrayList ();for(int i=0;i<strArrayR.Length;i++)
         R.Add (strArrayR[i]);
    for(int i=0;i<strArrayM.Length;i++)
         M.Add (strArrayM[i]);
    for(int i=0;i<strArrayC.Length;i++)
         C.Add (strArrayC[i]);在你Address文件中,你不应该去访问strArrayR,而应该去访问R,其它同理,代码如下:
    switch(comboBox1.Text[0].ToString())
    {
    case "R":
    textBox2.Text=R[nIndex].ToString();
    break;
    case "M":
    textBox2.Text=M[nIndex].ToString();
    break;
    case "C":
    textBox2.Text=C[nIndex].ToString();
    break;
    };
      

  11.   

    在Params中,代码可以简化为:
    R.AddRange(r.Split(','));
    M.AddRange(m.Split(','));
    C.AddRange(c.Split(','));
    只要这三句就行了。
      

  12.   

    E:\work\Menu\Address.cs(387): The name 'R' does not exist in the class or namespace 'Menu.Address'
      

  13.   

    怎么把类名忘了,把类名加上就行了在你Address文件中,你不应该去访问strArrayR,而应该去访问R,其它同理,代码如下:
    switch(comboBox1.Text[0].ToString())
    {
    case "R":
    textBox2.Text=Params.R[nIndex].ToString();
    break;
    case "M":
    textBox2.Text=Params.M[nIndex].ToString();
    break;
    case "C":
    textBox2.Text=Params.C[nIndex].ToString();
    break;
    };
      

  14.   

    在comboBox1里面怎么才有R1,R2,R3,R4...;M1,M2,....;C1,C2,...?
      

  15.   

    这只有你自己手动加了
    for(int i=0;i<Params.R.Count;i++)
        comboBox1.Items.Add("R"+Convert.ToString(i+1));for(int i=0;i<Params.M.Count;i++)
        comboBox1.Items.Add("M"+Convert.ToString(i+1));for(int i=0;i<Params.C.Count;i++)
        comboBox1.Items.Add("C"+Convert.ToString(i+1));
      

  16.   

    谢谢!
    switch(comboBox1.Text[0].ToString())
    {
    case "R":
    textBox2.Text=Params.R[nIndex-1].ToString();
    break;
    case "M":
    textBox2.Text=Params.M[nIndex-1].ToString();
    break;
    case "C":
    textBox2.Text=Params.C[nIndex-1].ToString();
    break;
    };
    才对。但是如果输入“5/8,4/8,3,3”、“12/20,45,50”、“2,3,4”。我想取的是“/5,/4,/3,/3”、"/12,/45,/50"、"/2,/3,/4",该怎么做呢?
      

  17.   

    如果把“5/8,4/8,3,3”看成“5/8,4/8,3/3,3/3”,把分子娶出来,做分母?
    string s = 5/8;
    string ss = string.Empty;
    if( s.IndexOf("/") != -1 )
    {
    ss = s.Substring(0,s.IndexOf("/"));
    }
    else
    {
    ss = s;
    }
    textBox2.Text = ss.ToString(); //结果是5
    怎样才能显示i/5,i在1-5之间呢?
      

  18.   

    真如你所说的,已经取出分子,
    那么对于你的“怎样才能显示i/5,i在1-5之间呢?”
    不知你的i在哪儿定义的,以及你到底想做些什么?如果仅仅想对数字进行判断,那么直接可以
    int nMax=int.Parse(ss);
    那么
    for(int i=1;i<=nMax;i++)//其中i的取值在1-5之间
    等等就可以操作了。
      

  19.   

    5/8的意思就是可能有8个地址,实际我们知道的有5个,1/5就是第一个地址,2/5是第2个,...5/5就是第5个.如果现在显示的是1/5,在Anchor.cs中按next(button),则显示2/5.
      

  20.   

    假如当前你显示的是5个中第一个地址时,点击Anchor.cs中按next(button)时,是否知道当前的索引号1和总值5呢?如果知道的话,那么显示第二个地址是很容易的;
    如果不知道的话,那么请在前面选择的时候做记录。
      

  21.   

    你太客气了,如果还有什么问题再找我吧!有空不妨看看.net带的例子,挺不错的。