C# 使用箭头键滚动可滚动控件
我在C#项目中使用了一个C# 使用箭头键滚动可滚动控件,c#,winforms,scroll,scrollbar,C#,Winforms,Scroll,Scrollbar,我在C#项目中使用了一个ScrollableControl,我想知道如何将箭头键映射到垂直/水平滚动 编辑:我的图片框获得焦点,我设法将按键映射到滚动。这里的问题是,当我按下箭头键时,它会滚动一次,然后失去焦点,将其交给Scrollviewer旁边的按钮。我希望scrollviewer不要失去焦点 这是我的代码,第二段是这里有趣的一段 private void drawMap(IGame game) { System.Windows.Forms.PictureBox pictureBox
ScrollableControl
,我想知道如何将箭头键映射到垂直/水平滚动
编辑:我的图片框获得焦点,我设法将按键映射到滚动。这里的问题是,当我按下箭头键时,它会滚动一次,然后失去焦点,将其交给Scrollviewer旁边的按钮。我希望scrollviewer不要失去焦点
这是我的代码,第二段是这里有趣的一段
private void drawMap(IGame game)
{
System.Windows.Forms.PictureBox pictureBox = new System.Windows.Forms.PictureBox();
pictureBox.Width = (int)Math.Sqrt((double)game.Map.grid.Count) * 50; pictureBox.Height = (int)Math.Sqrt((double)game.Map.grid.Count) * 50;
pictureBox.Paint += new System.Windows.Forms.PaintEventHandler(game.Map.afficher);
pictureBox.MouseEnter += pictureBoxFocus;
pictureBox.Click += pictureBoxFocus;
pictureBox.Click += mapClicked;
System.Windows.Forms.ScrollableControl sc = new System.Windows.Forms.ScrollableControl();
sc.Controls.Add(pictureBox);
sc.AutoScroll = true;
windowsFormsHost1.Child = sc;
}
提前感谢:)
另外:我的滚动算法有点脏,工作不太好,所以我想知道是否有一个“简单的方法”来做到这一点
private void sc_PreviewKeyDown(object sender, System.Windows.Forms.PreviewKeyDownEventArgs e)
{
System.Windows.Forms.ScrollableControl sc = (System.Windows.Forms.ScrollableControl)sender;
switch (e.KeyValue)
{
case (int)System.Windows.Forms.Keys.Down:
sc.VerticalScroll.Value += 50;
break;
case (int)System.Windows.Forms.Keys.Up:
if(sc.VerticalScroll.Value - 50 < 0)
sc.VerticalScroll.Value = 0;
else sc.VerticalScroll.Value -= 50;
break;
case (int)System.Windows.Forms.Keys.Right:
sc.HorizontalScroll.Value += 50;
break;
case (int)System.Windows.Forms.Keys.Left:
if (sc.HorizontalScroll.Value - 50 < 0)
sc.HorizontalScroll.Value = 0;
else sc.HorizontalScroll.Value -= 50;
break;
}
windowsFormsHost1.Child.Focus();
}
private void sc_PreviewKeyDown(对象发送方,System.Windows.Forms.PreviewKeyDownEventArgs e)
{
System.Windows.Forms.ScrollableControl sc=(System.Windows.Forms.ScrollableControl)发送方;
开关(如键值)
{
大小写(int)System.Windows.Forms.Keys.Down:
sc.VerticalScroll.Value+=50;
打破
案例(int)System.Windows.Forms.Keys.Up:
如果(sc.VerticalScroll.Value-50<0)
sc.VerticalScroll.Value=0;
else sc.VerticalScroll.Value-=50;
打破
case(int)System.Windows.Forms.Keys.Right:
sc.HorizontalScroll.Value+=50;
打破
大小写(int)System.Windows.Forms.Keys.Left:
如果(sc.HorizontalScroll.Value-50<0)
sc.HorizontalScroll.Value=0;
else sc.HorizontalScroll.Value-=50;
打破
}
windowsFormsHost1.Child.Focus();
}
您尝试过什么?您是否在捕捉箭头键或调用滚动时遇到问题?您没有任何可以接收焦点的控件。因此,您将永远无法让他们响应击键。您需要通过创建一个更智能的控件来解决这个问题,该控件可以接收焦点并响应击键。Hm my picture box的可能副本可以获得焦点,我成功地将按键映射到滚动。这里的问题是,当我按下箭头键时,它会滚动一次,然后失去焦点,将其交给Scrollviewer旁边的按钮。我希望scrollviewer不要丢失焦点是的,光标键将焦点移动到下一个控件。您忘记将e.IsInputKey设置为true以防止发生这种情况。