C# 正在尝试在计时器上移动图片控件

C# 正在尝试在计时器上移动图片控件,c#,winforms,C#,Winforms,如果我做得对的话,我的心应该会移动,但它什么都不做。 我做错什么了吗?如果是,请告诉我?一个可能的问题是使用 获取一个值,该值指示哪些修改器键(SHIFT、CTRL和ALT)处于按下状态 如果您想使用方向键-请收听keyDown事件并将方向保存在那里。样本及详情: 乍一看,我可以告诉你,在if块之后,你不需要这些“;”。@当你编辑完后,我在这里开始了我的C#知识。这个我真的很困惑,但我会习惯的。不管怎样,我还是不动。如果这是一个可行的解决方案,我会把它作为一个答案发布,这只是一个澄清。顺便说一句

如果我做得对的话,我的心应该会移动,但它什么都不做。
我做错什么了吗?如果是,请告诉我?

一个可能的问题是使用

获取一个值,该值指示哪些修改器键(SHIFT、CTRL和ALT)处于按下状态

如果您想使用方向键-请收听keyDown事件并将方向保存在那里。样本及详情:


乍一看,我可以告诉你,在
if
块之后,你不需要这些“;”。@当你编辑完后,我在这里开始了我的C#知识。这个我真的很困惑,但我会习惯的。不管怎样,我还是不动。如果这是一个可行的解决方案,我会把它作为一个答案发布,这只是一个澄清。顺便说一句,我并不是移除那个部分的人,那是阿列克谢·列文科夫。我修正了缩进。@fox125“谢谢”注释和各种各样的“新这里”,“搜索了很多”不会给帖子添加太多信息,所以通常会被删除(可以从开始讨论META)。与此相反,关于您的调查的一些信息会更有用(例如,“在调试
Control.ModifierKeys
newer shows
Key.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";
     }