//初始化数组
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)
}
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)
}
string[] strArrayR=R.Split(',');
对于M=12/20,45,50
string[] strArrayM=M.Split(',');
对于C=2,3,4
string[] strArrayC=C.Split(',');转换成数组,相应的操作就简单了。
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;
};
}
}
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;
};
}
}
在类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?
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'
我上面的做法,以为当输入的时候直接是“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;
};
}
}
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]);
在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;
};
R.AddRange(r.Split(','));
M.AddRange(m.Split(','));
C.AddRange(c.Split(','));
只要这三句就行了。
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;
};
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));
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",该怎么做呢?
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之间呢?
那么对于你的“怎样才能显示i/5,i在1-5之间呢?”
不知你的i在哪儿定义的,以及你到底想做些什么?如果仅仅想对数字进行判断,那么直接可以
int nMax=int.Parse(ss);
那么
for(int i=1;i<=nMax;i++)//其中i的取值在1-5之间
等等就可以操作了。
如果不知道的话,那么请在前面选择的时候做记录。