Я написал программу, которая отображает цвет и поток глубины сенсора kinect. В изображении глубины пользователь может выбрать две точки, а программа отображает координаты точек. Теперь я хочу улучшить свою программу. Поэтому я добавил новое окно Disatance.xaml. Это окно открывается, когда пользователь проверяет флажок. В этом окне я хочу показать координаты, а не в MainWindow. Поэтому мне нужно передать целочисленные переменные x- и y-Coordinates. Моя проблема в том, что я действительно новичок в С#, и я не знаю, как передавать целые числа из одного окна в другое окно. Я действительно, как кто-то может мне помочь. Основной код выполняется в главном окне. В этом случае я открываю второе окно, нажимая на кнопку. Мой код выглядит так:
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 в окно Distance
Объявите свой класс 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 этими свойствами.