C# 正在尝试在计时器上移动图片控件
如果我做得对的话,我的心应该会移动,但它什么都不做。C# 正在尝试在计时器上移动图片控件,c#,winforms,C#,Winforms,如果我做得对的话,我的心应该会移动,但它什么都不做。 我做错什么了吗?如果是,请告诉我?一个可能的问题是使用 获取一个值,该值指示哪些修改器键(SHIFT、CTRL和ALT)处于按下状态 如果您想使用方向键-请收听keyDown事件并将方向保存在那里。样本及详情: 乍一看,我可以告诉你,在if块之后,你不需要这些“;”。@当你编辑完后,我在这里开始了我的C#知识。这个我真的很困惑,但我会习惯的。不管怎样,我还是不动。如果这是一个可行的解决方案,我会把它作为一个答案发布,这只是一个澄清。顺便说一句
我做错什么了吗?如果是,请告诉我?一个可能的问题是使用 获取一个值,该值指示哪些修改器键(SHIFT、CTRL和ALT)处于按下状态 如果您想使用方向键-请收听keyDown事件并将方向保存在那里。样本及详情:
乍一看,我可以告诉你,在
if
块之后,你不需要这些“;”。@当你编辑完后,我在这里开始了我的C#知识。这个我真的很困惑,但我会习惯的。不管怎样,我还是不动。如果这是一个可行的解决方案,我会把它作为一个答案发布,这只是一个澄清。顺便说一句,我并不是移除那个部分的人,那是阿列克谢·列文科夫。我修正了缩进。@fox125“谢谢”注释和各种各样的“新这里”,“搜索了很多”不会给帖子添加太多信息,所以通常会被删除(可以从开始讨论META)。与此相反,关于您的调查的一些信息会更有用(例如,“在调试Control.ModifierKeys
newer showsKey.Right
value”或类似的内容)true@fox125正如Alexei提到的,您应该为此使用键盘事件。无论是按键向下、按键向上还是按键按下。你也不需要定时器。如果您在绑定事件时遇到问题,我想鼓励您这样做。@Theraot-实际上计时器可能是一个不错的选择,因为它提供了事件的恒定速度,因此与键盘事件不同,它提供了一致的移动速度(显然这取决于目标-像球一样不断移动对象,而不是只在按下键时移动)。有点类似。计时器将受到其他事件的影响,但它确实会提供更稳定的行为。目标似乎是一个游戏(给定名称空间名称),因为我将测量时间并以每秒像素为单位声明速度,并且我将使用SDL或OpenGL和一个主循环,没有事件处理程序。但这是@fox125在现阶段无法达到的整体水平。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Game2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
private void Move_Ship(int X_Coord ,int Y_Coord, string Positioning)
{
if(Positioning == "Rechts")
{
X_Coord += 5;
this.pictureBox1.Location = new Point(X_Coord, Y_Coord);
};
if (Positioning == "Links")
{
X_Coord -= 5;
this.pictureBox1.Location = new Point(X_Coord, Y_Coord);
};
if (Positioning == "Up")
{
Y_Coord -= 5;
this.pictureBox1.Location = new Point(X_Coord, Y_Coord);
};
if (Positioning == "Down")
{
Y_Coord += 5;
this.pictureBox1.Location = new Point(X_Coord, Y_Coord);
};
}
private void timer1_Tick(object sender, EventArgs e)
{
if (Control.ModifierKeys == Keys.Up)
{
Move_Ship(pictureBox1.Location.X, pictureBox1.Location.Y, "Up");
};
if (Control.ModifierKeys == Keys.Down)
{
Move_Ship(pictureBox1.Location.X, pictureBox1.Location.Y, "Down");
};
if (Control.ModifierKeys == Keys.Left)
{
Move_Ship(pictureBox1.Location.X, pictureBox1.Location.Y, "Links");
};
if (Control.ModifierKeys == Keys.Right)
{
Move_Ship(pictureBox1.Location.X, pictureBox1.Location.Y, "Rechts");
};
}
}
}
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode == Keys.Down)
{
direction = "Down";
}