C# 将trackbar的值用作另一个类的变量

C# 将trackbar的值用作另一个类的变量,c#,visual-studio-2013,trackbar,C#,Visual Studio 2013,Trackbar,我想为我正在VS2013中使用Winforms开发的游戏使用轨迹栏 其想法是,用户应该使用轨迹栏选择球的速度,并将轨迹栏中的值用于不同类中的另一个变量 以下是我目前拥有的代码: public static int trackBarValue; //... Other global variables public Form1() { //... Other code } private void trackBar1_Scroll(object sender, EventArgs e)

我想为我正在VS2013中使用Winforms开发的游戏使用轨迹栏

其想法是,用户应该使用轨迹栏选择球的速度,并将轨迹栏中的值用于不同类中的另一个变量

以下是我目前拥有的代码:

public static int trackBarValue;
//... Other global variables

public Form1()
{
    //... Other code
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
    trackBarValue = trackBar1.Value;
}


private void timer1_Tick(object sender, EventArgs e)
{
    ball.moveBall();
}
在我的ball课程中,我希望使用轨迹栏的值:

// Declaring the variables for Ball Speed in X and Y coordinates
private int xSpeed, ySpeed;

public Ball()
{ 
    //... Other code

    xSpeed = Form1.ranNum.Next(1, 20);
    ySpeed = Form1.trackBarValue; // <- An example of what I was hoping to use in my code.
}

public void moveBall()
{
    ballRec.X += xSpeed;
    ballRec.Y -= ySpeed;
}
当我按原样运行代码时,xSpeed会像预期的那样完美工作,但是无法识别来自trackbar的trackbar值

“我的轨迹栏”的当前属性包括:

最高限额:100 最少:20 勾号频率:0 表索引:11 价值:20 这并不重要


如何从轨迹栏中收集值并在这个ball类中使用它们?我制作了一个较小的程序,每次移动轨迹栏时都会在标签中显示轨迹栏的值,但我似乎无法将这些知识应用到上面的程序中。

首先,只有在创建球时才设置ySpeed的值,如果球被快速放置,它应该可以工作,但是,如果每次您的TrackBarSpeed滚动时都检查它以更改其ySpeed值,那么您将遇到一些问题。 解决问题的简单方法是使用getter属性,而不是使用ySpeed字段

private int xSpeed;
private int ySpeedMod; // we have the direction variable here -1 or 1 so everytime you want to change the direction you change this variable
private int ySpeed {
    get { return Form.trackBarValue * ySpeedMod; }
}
就像每次引用ySpeed时,它都会计算get{}代码,因此它会得到Y的最后一个值
发生这种情况是因为int是一个structvalue而不是类引用,所以在设置其值后,它将依赖于特定时间内给定的值

您是否也根据您的期望签出了该值..您是否至少调试了代码/逐步完成了它。。?看起来您缺少了实际TrackerBar的EventHandler,请看这里的教程@DJKRAZE,我认为这是因为一旦表单初始化,它不知道从trackbar使用哪个值,因此它将其设置为0。或者至少这是我能弄明白的,但我不知道如何将轨迹栏的默认值设置为20。例如,你有没有看我发布的链接?它显示了一个视觉表示,也很难说你的初始化是什么;在没有看到相关代码的情况下看起来像或正在做什么。。应该在表格上我会的think@DJKRAZE嘿,谢谢你的评论+链接,谢谢。你介意看看下面建议的解决方案吗?Thankstorry我在stackoverflow中编写了它,所以我没有得到语法错误,它是在Form.trackBarValue之前编辑的return;为编辑干杯,但是,现在我得到:错误1属性或索引器'Breakout.Ball.ySpeed'无法分配到-它是只读的:很抱歉,hahaj必须从代码中获取ySpeed=Form.trackBarValue,它应该在我的冲突语句中工作:\S这是整个文件:ps。忽略文件末尾附近的if语句现在我得到了它,这两种方式都无法工作,因为您要修改ySpeed,但是您也希望它基于trackBarValue,就像这个私有的xSpeed一样;私人ySpeedMod;//1或-1私有ySpeed{get{return Form.trackBarValue*ySpeedMod;}}}并在每个ySpeed*=-1中更改为ySpeedMod*=-1,记住删除此行`ySpeed=Form1.trackBarValue`