我写了一个显示kinect传感器颜色和深度流的程序。在深度图像中,用户可以选择两个点,程序显示点的坐标。现在我想改进我的计划。所以我添加了一个名为Disatance.xaml的新窗口。当用户选中复选框时,将打开此窗口。在这个窗口中,我想显示坐标,而不是在MainWindow中。所以我需要传递x和y坐标的整数变量。我现在的问题是我对C#很陌生,而且我不知道如何将整数从一个窗口传递到另一个窗口。我真的有人可以帮助我。 主代码在主窗口中执行。在那里我打开第二个窗口,点击一个按钮。我的代码如下所示:
private void CmdDistance_Click(object senderr, RoutedEventArgs e)
{
Distance distance = new Distance();
distance.Show();
}
坐标当前是由我的函数void Mouse_ClickTest计算并显示的:
private void Mouse_ClickTest(object sender, System.Windows.Input.MouseEventArgs e)
{
if (ChkDistance.IsChecked == true)
{
System.Windows.Point myMousePosition = e.GetPosition(DepthImage);
double xpixel = myMousePosition.X;
double ypixel = myMousePosition.Y;
int xpos = (int)xpixel;
int ypos = (int)ypixel;
if ((xpos > 0 || ypos > 0) && (xpos <= 640 || ypos <= 480))
{
int depthWidth = mySensor.DepthStream.FrameWidth;
int depthIndex = xpos + (ypos * depthWidth);
if (depthIndex < 307840)
{
SkeletonPoint mySkeletonArray = this.mySkeletonArray[depthIndex];
float zpos = mySkeletonArray.Z;
zpos = zpos * 1000;
int z = (int)zpos;
float xp = mySkeletonArray.X;
xp = xp * 1000;
int x = (int)xp;
float yp = mySkeletonArray.Y;
yp = yp * 1000;
int y = (int)yp;
if (e.LeftButton == MouseButtonState.Pressed)
{
if (i == false)
{
TxtCoordX.Text = string.Format("X: {0}", x);
TxtCoordY.Text = string.Format("Y: {0}", y);
TxtCoordZ.Text = string.Format("Z: {0}", z);
i = true;
}
else
{
TxtCoordX2.Text = string.Format("X: {0}", x);
TxtCoordY2.Text = string.Format("Y: {0}", y);
TxtCoordZ2.Text = string.Format("Z: {0}", z);
i = true;
}
}
}
else
{
return;
}
}
else
{
return;
}
}
}
现在我想将整数变量x,y和z传递给窗口距离
答案 0 :(得分:0)
在Distance
课程中声明您的MainWindow
班级范围更高。你现在拥有它的方式,一旦Click处理程序完成执行,它就会被创建并超出范围。
执行您所要求的最快最肮脏的方法是在距离表单的代码隐藏中创建一个方法。它可能是这样的:
public void SetCoordinates(float x,float y,float z) { //在此设置属性 }
然后,您可以为这些属性创建TextBlocks或TextBoxes。
而不是:
new Distance();
执行:
new Distance(float x, float y, float z);
然后,您可以为这些属性创建TextBlocks或TextBoxes。