小编Mik*_*nes的帖子

使用KeyDown事件平滑移动控件

我正在尝试使用Visual Studio Windows窗体应用程序在C#中创建一个简单的游戏.我想让用户能够使用相应的键自由地向上,向右,向下和向左移动蓝色框.

我正在使用一个Timer,它每0.1秒检测一次盒子的新位置,以及一个实际改变盒子位置的keydown事件.按住键时,盒子需要保持相应方向的移动.

我的问题是,我当前的程序完成了这项工作,除了当用户第一次按下一个键时,该框移动一点并在它继续移动之前暂停一会儿.我想让这个盒子从第一次按键移动得更顺畅而不会像那样暂停.这可能很难通过单词解释,所以我添加了一个gif文件.

在此输入图像描述

有没有办法来解决这个问题?这是我目前的代码.

private int posX, posY; //Both initialized in Form Load event

private void Form1_KeyDown(object sender, KeyEventArgs e)
{ 
    if (e.KeyCode == Keys.Up)
        posY -= 3;
    else if (e.KeyCode == Keys.Right)
        posX += 3;
    else if (e.KeyCode == Keys.Down)
        posY += 3;
    else if (e.KeyCode == Keys.Left)
        posX -= 3;
}

//Timer ticks every 0.1 second
private void Timer_Tick(object sender, EventArgs e)
{
    Box.Location = new Point(posX, posY);
    labelPosX.Text = posX.ToString(); //Testing purposes
    labelPosY.Text = posY.ToString(); …
Run Code Online (Sandbox Code Playgroud)

c# keydown winforms

4
推荐指数
1
解决办法
734
查看次数

仅在 DataGridView 的某一列上使用手形光标

我正在用 C# 编写一个表单应用程序,我有一个 DataGridView,它显示来自 SQL 服务器的数据。这些数据包含一个名为的Remove列,该列的所有行都包含字符串Remove。现在我想通过更改背景颜色并使用手形光标使该列的所有单元格看起来像一个按钮。

我的问题是,我不能仅在此列上使用手形光标。我想要的是,当鼠标悬停在该Remove列的任何行上时,将鼠标指针更改为手形光标,而不是其他任何地方。

for(int i=0; i<myDataGridView.RowCount; i++){
    myDataGridView.Cursor = Cursors.Hand;
}
Run Code Online (Sandbox Code Playgroud)

没有做我想要的,因为鼠标指针变成了 DataGridView 上任何地方的手形光标,而不仅仅是Remove列上。我试过类似的东西

for(int i=0; i<myDataGridView.RowCount; i++){
    myDataGridView.Columns["Remove"].Cursor = Cursors.Hand;
}
Run Code Online (Sandbox Code Playgroud)

但这给出了一个错误:

System.Windows.Forms.DataGridViewColumn 不包含“光标”的定义。

有什么好的方法可以实现这一目标吗?谢谢你。

c# datagridview winforms

3
推荐指数
2
解决办法
3676
查看次数

为什么我的带有 OFFSET/FETCH 的 SQL 语句不起作用?

我正在使用 SQL Server,在表中Purchase我有大约 50 条记录。我试图获取前 20 个(0-20),然后是 20-40,最后是最后 10 个。

我拥有的 SQL 是:

SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY

SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 19 ROWS FETCH NEXT 20 ROWS ONLY

SELECT *
FROM Purchase
WHERE dataOK = 'OK'
ORDER BY PurchaseDate DESC
OFFSET 39 ROWS FETCH NEXT 20 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

前两个命令返回完全相同的记录。为什么他们没有显示两组不同的结果?

编辑:我知道XXinFETCH …

sql t-sql sql-server

1
推荐指数
1
解决办法
5764
查看次数

标签 统计

c# ×2

winforms ×2

datagridview ×1

keydown ×1

sql ×1

sql-server ×1

t-sql ×1