winform 文本框中输入的矩阵读入到二维数组当中的问题

TSQ20104195 2012-05-17 10:47:36
窗口中有两个文本框 txt1 txt2 和一个button
我在类当中定义的:
static double[ , ]m;
static string[] b;
当运行程序的时候 如果输入一个“,”后,会出现错误

txt1的keypress事件为
private void txt1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
if (e.KeyChar == 8 || (e.KeyChar == 13 || e.KeyChar == 44 || e.KeyChar==46 )) //限制只能输入逗号、小数点和数字。
{
e.Handled = false;
}
button的click事件为
private void button1_Click_1(object sender, EventArgs e)
{
int k, j;
int c;
int i = txt1.Lines.Length; //文本的行数
string[] temp = new string[i];
temp = txt1.Lines; // temp数组记录的是文本框中每一行的字符串
for (k = 0; k < i; k++)
{
b = temp[k].Split(','); //以“,”分割每一行的字符串,得到字符串数组b
c = b.Count(); //计算每一行中数组b中字符的个数;
for (j = 0; j < c; j++)
{
double[,] m = new double[i, c]; //i为二维数组的行数,c为二维数组的列数,也就是m[i,c]的二维数组。
m[k, j] = double.Parse(b[j]); //将分割的字符转化为 double 类型
} //这里出现错误:“输入字符串的格式不正确”
}
txt2.Text = m[0,0].ToString();
//这里有个问题:“m”与声明“测绘.Form4.m”冲突
}

点击button时,本想将矩阵传入到二维数组中,但是出现错误,程序停止
...全文
319 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TSQ20104195 2012-05-17
  • 打赏
  • 举报
回复
test2050 你好:

通过监视,我发现了问题,谢谢你的提醒。

如果在textchanged事件中判断 endswith(",,"),但是里面没有 e.handle 函数,我就没法用 e.handle=false 来阻止用户输入,应该怎样自动删除前一个逗号。

我想将m[k,j]的值传给 txt2 我怎么来改名称。

王熙伟 2012-05-17
  • 打赏
  • 举报
回复

double d = 0;
// m 应该在此处初始化
m = new double[i];

for (k = 0; k < i; k++)

// ...此处略去若干个字


// m[k]应该这样初始化

m[k] = new double[c];
for (j = 0; j < c; j++)
{

// 下面的语句属于初始化的逻辑有错误
//double[,] m = new double[i, c]; //i为二维数组的行数,c为二维数组的列数,也就是m[i,c]的二维数组
//m[k, j] = double.Parse(b[j]); //将分割的字符转化为 double 类型

// m[k,j]应该这样赋值
if(double.tryParse(b[j],d)}{
m[k,j] = d;
}


}

txt2.Text = m[0,0].ToString();
}
test2050 2012-05-17
  • 打赏
  • 举报
回复
断点调试看double.Parse(b[j]); 出错时b[j]里的内容是什么就清楚了。m的问题是你两个地方定义了m这个变量。改一地方不叫m就可以了
TSQ20104195 2012-05-17
  • 打赏
  • 举报
回复
bdmh 你好 :
首先 我将字符串以“,”分割,在 b数组 中存的都是单独的字符串,split分割后,b[j]中不包含逗号啊?
然后,我想把m数组的值传到txt2中,是不是要重新 new 一个?


谢谢 test2050的帮助。
test2050 2012-05-17
  • 打赏
  • 举报
回复
textchanged事件中判断是否endwith(",,")
在你的另一个贴子里刚回复了你。
bdmh 2012-05-17
  • 打赏
  • 举报
回复
m要换个名,否则不知道是局部m还是全局的m,因为已经有一个static double[ , ]m;
转换错误说明b[j]不符合转换规则,逗号转不成 double
test2050 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
test2050 你好:

通过监视,我发现了问题,谢谢你的提醒。

如果在textchanged事件中判断 endswith(",,"),但是里面没有 e.handle 函数,我就没法用 e.handle=false 来阻止用户输入,应该怎样自动删除前一个逗号。

我想将m[k,j]的值传给 txt2 我怎么来改名称。
[/Quote]
事件中textbox1.text=textbox1.text.replace(",,",",");把两个逗号换为一个逗号

我想将m[k,j]的值传给 txt2 我怎么来改名称
==》改名称是说你在两处定义了m。跟传值毛关系。 你把m[k,j]定义为全局变量。
txt2.text=m[1,2]就得到值了啊

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧