c#结构提调用问题

qq_14995971 2016-06-15 10:29:07
定义一个结构体MY_POS,然后再定义了全局变量pos,在一个button事件中给pos赋值,在其他事件中怎么调用pos啊?
public struct MY_POS
{
public double x;
public double y;
public double z;
}

double[] pos = {}; //定义全局变量

private void button8_Click(object sender, EventArgs e)
{
string[] t = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
MY_POS[] pos = new MY_POS[t.Length];
for (int W = 0; W < t.Length; W++)
{
pos[W].x = matrix[0];
pos[W].y = matrix[1];
pos[W].z = matrix[2];
}
}
}
}
...全文
102 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_14995971 2016-06-15
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
是不对!你的 textBox5.Text 的内容是什么? 既然可能是多组数据,那么你 for (int W = 0; W < t.Length; W++) { pos[W].x = matrix[0]; pos[W].y = matrix[1]; pos[W].z = matrix[2]; } 不是只将一组赋值给了 pos 吗?
之前的不对,应该是这样写吧,可是这样写就提示索引超出范围了
for (int i = 0; i < Selection.ItemCount; i++)
                {
                    comp = (IvcComponent)Selection.getItem(i);
                    object name = comp.getProperty("Name");
                    double[] matrix = (double[])comp.RootNode.getProperty("WorldPositionMatrix");//获得坐标下x,y,z的坐标
                    pos = new MY_POS[i];
                    pos[i].x = matrix[0];
                    pos[i].y = matrix[1];
                    pos[i].z = matrix[2];
                    if (textBox5.Text != "")
                    {
                          textBox5.Text += "->" + name.ToString();
                      }
                        else
                    {
                          textBox5.Text = name.ToString();
                      }
                }
xuzuning 2016-06-15
  • 打赏
  • 举报
回复
是不对!你的 textBox5.Text 的内容是什么? 既然可能是多组数据,那么你 for (int W = 0; W < t.Length; W++) { pos[W].x = matrix[0]; pos[W].y = matrix[1]; pos[W].z = matrix[2]; } 不是只将一组赋值给了 pos 吗?
qq_14995971 2016-06-15
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
你在 button8_Click 方法赋值结束后检查 pos 每一项的值
我看了,我试了两个点a和b,textbox显示a->b,那么pos[0]的xyz应该是a的坐标,可是却显示的b的坐标,而且pos[1]的值和pos[0]一样....
xuzuning 2016-06-15
  • 打赏
  • 举报
回复
你在 button8_Click 方法赋值结束后检查 pos 每一项的值
qq_14995971 2016-06-15
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
你的 button8_Click 方法是对 pos 赋值,所以要 pos = new MY_POS[t.Length]; 其他的方法里是使用 pos 的内容,因此就不能 pos = new MY_POS[t.Length]; 了 否则辛辛苦苦赋的值不都被 new 掉了吗?
string[] t = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            double dis = 0;
            for (int W = 1; W < t.Length; W++)
            {
                double xd = pos[W].x - pos[W - 1].x;
                double yd = pos[W].y - pos[W - 1].y;
                double zd = pos[W].z - pos[W - 1].z;
                dis += Math.Sqrt(xd * xd + yd * yd + zd * zd);
                textBox6.Text = dis.ToString();
            }
为什么dis的值还是0呢......我看了下pos[W].x和 pos[W - 1].x结果是一样的,这是为什么啊,应该不一样啊
xuzuning 2016-06-15
  • 打赏
  • 举报
回复
你的 button8_Click 方法是对 pos 赋值,所以要 pos = new MY_POS[t.Length]; 其他的方法里是使用 pos 的内容,因此就不能 pos = new MY_POS[t.Length]; 了 否则辛辛苦苦赋的值不都被 new 掉了吗?
qq_14995971 2016-06-15
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
第 8 行 double[] pos = {}; //定义全局变量 改为 MY_POS[] pos; //定义全局变量 第 13 行 MY_POS[] pos = new MY_POS[t.Length]; 改为 pos = new MY_POS[t.Length];
那我在其他事件里MY_POS[] pos = new MY_POS[t.Length];这么调用吗
xuzuning 2016-06-15
  • 打赏
  • 举报
回复
第 8 行 double[] pos = {}; //定义全局变量 改为 MY_POS[] pos; //定义全局变量 第 13 行 MY_POS[] pos = new MY_POS[t.Length]; 改为 pos = new MY_POS[t.Length];
xuzuning 2016-06-15
  • 打赏
  • 举报
回复
6 行 的 pos = new MY_POS[i]; 移到 第一行之前,并改为 pos = new MY_POS[Selection.ItemCount];

111,119

社区成员

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

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

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