找回密码
 立即注册

QQ登录

只需一步,快速开始

hanamichi

论坛元老

12

主题

40

帖子

1万

积分

论坛元老

积分
13590

活字格认证

hanamichi
论坛元老   /  发表于:2014-6-26 16:56  /   查看:10729  /  回复:9
Form上有Sheet,还有其他控件比如按钮,下拉菜单等等,按下键盘的Tab键时焦点会在各个控件之间移动,
当移动到Sheet上以后,继续按下Tab键,焦点会在Sheet里继续移动,遍历左右的单元格以后焦点就停了。

请问有没有这样的属性设定,使焦点移动到Sheet上以后,如果继续按下Tab键,焦点会移动到Sheet外的另外的控件上,
而不是被限制在Sheet里了。也就是把Sheet当成和其他一样的控件,Tab键移动焦点只落到它身上一次。

谢谢!

9 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-6-26 19:00:00
沙发
回复 1楼hanamichi的帖子

请使用以下代码测试:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.InputMap keymap = new FarPoint.Win.Spread.InputMap();
  4.             keymap = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused);
  5.             keymap.Put(new FarPoint.Win.Spread.Keystroke(Keys.Tab, Keys.None),FarPoint.Win.Spread.SpreadActions.ActivateNextChild);
  6.         }

  7.         private void fpSpread1_KeyDown(object sender, KeyEventArgs e)
  8.         {
  9.             textBox1.Focus();
  10.         }
复制代码
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-6-27 10:04:00
板凳
谢谢回答。我照样写了例子,按Tab键把焦点移动到FpSpread1以后,再按下Tab键,焦点确实不继续遍历里边的单元格了,但也并没有向外移动到FpSpread1之后的控件,而是一直停在FpSpread1里面的第一个单元格上。请问是哪里的问题?还有,fpSpread1_KeyDown这个方法是干啥用的?是自动调用么?不用加Handles什么什么吗?
谢谢!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-6-30 14:05:00
地板
回复 3楼hanamichi的帖子

你好,
请问你使用 Spread 的版本信息是?我使用 Spread for WinForms 7.0V3 没有重现3#描述的问题:

Demo1.gif

附件是我的Demo:
VS2013+C#+.NET 4.0

demo.zip (58.75 KB, 下载次数: 759)
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-1 09:31:00
5#
谢谢回复。
你的附件里的这句 【this.fpSpread1.KeyDown+=fpSpread1_KeyDown;】
为啥我的spread里没有KeyDown这个属性呢。我是用vb.net写的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-1 15:46:00
6#
回复 5楼hanamichi的帖子

VB.NET 可以通过如图方式添加 KeyDown 事件:

Untitled.png
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-1 18:34:00
7#
谢谢回答。KeyDown 事件我添加上了,下面这样对吧。
    Private Sub FpSpread1_KeyDown(ByVal sender As System.Object, ByVal e As KeyEventArgs)
        If e.KeyCode = Keys.Tab Then
            TextBox1.Focus()
        End If
    End Sub
你的Demo里 Form1.cs 的第28行,this.fpSpread1.KeyDown+=fpSpread1_KeyDown;
这个要写到我的程序里的load方法里吧,但我的Me.FpSpread1点不出KeyDown。咋回事?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-2 13:37:00
8#
回复 7楼hanamichi的帖子

VB.NET 和 C# 使用代码添加事件方式有差别,VB.NET 写法如下:

  1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.         AddHandler Me.FpSpread1.KeyDown, AddressOf FpSpread1_KeyDown
  3.         AddHandler Me.FpSpread1.KeyUp, AddressOf FpSpread1_keyUp
  4.     End Sub

  5.     Private Sub FpSpread1_KeyDown(sender As Object, e As KeyEventArgs) Handles FpSpread1.KeyDown

  6.     End Sub

  7.     Private Sub FpSpread1_keyUp(sender As Object, e As KeyEventArgs) Handles FpSpread1.KeyUp
  8.     End Sub
复制代码

评分

参与人数 1满意度 +5 收起 理由
hanamichi + 5 谢谢

查看全部评分

回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-2 14:10:00
9#
原来如此,搞定了。谢谢版主!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-2 15:27:00
10#
回复 9楼hanamichi的帖子

客气了。

评分

参与人数 1满意度 +5 收起 理由
hanamichi + 5 谢谢

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部