找回密码
 立即注册

QQ登录

只需一步,快速开始

laonawuli

银牌会员

39

主题

146

帖子

3383

积分

银牌会员

积分
3383

活字格认证

laonawuli
银牌会员   /  发表于:2011-12-21 12:54  /   查看:18360  /  回复:25
Hello~

可能从标题中很难理解我的Case,我仔细解释一下哈:

TextBox不是有     SelectionStart 与 SelectionLength 属性 和 Select方法吗?
于是,我用下面的代码,就能实现往某个TextBox的光标闪烁位置插入字符,并将光标置于被插入字符的末尾的功能。
               string s="需要插入的字符";
                int start = textBox1.SelectionStart;
                int length = textBox1.SelectionLength;
                textBox1.Text = textBox1.Text.Remove(start, length);
                textBox1.Text = textBox1.Text.Insert(start, s);
                textBox1.Select(start + s.Length, 0);

我现在需要在编辑某一个Cell的Text时,按下某个快捷键,就往Cell光标所在位置插入字符。快捷键啥的不是问题,问题就是Cell有没有类似于SelectionStart、SelectionLength、Select等可以用于控制的属性或者方法呢?

多谢iceman指教~

25 个回复

倒序浏览
laonawuli
银牌会员   /  发表于:2011-12-21 13:01:00
沙发
另外,如何知道某一个Cell是否处于Editing状态~?~?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-21 14:26:00
板凳

回复 2# laonawuli 的帖子

hello laonawuli ,2# 判断 Cell 是否处于 Editing 状态可以通过 fpSpread1_EditModeOn 事件和 fpSpread1_EditModeOff 事件去判断。
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2011-12-21 15:39:00
地板
原帖由 iceman 于 2011-12-21 14:26:00 发表
hello laonawuli ,2# 判断 Cell 是否处于 Editing 状态可以通过 fpSpread1_EditModeOn 事件和 fpSpread1_EditModeOff 事件去判断。


多谢iceman,那请问第一个问题呢...
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2011-12-21 15:51:00
5#
原帖由 iceman 于 2011-12-21 14:26:00 发表
hello laonawuli ,2# 判断 Cell 是否处于 Editing 状态可以通过 fpSpread1_EditModeOn 事件和 fpSpread1_EditModeOff 事件去判断。


我在查询用WIN32 API的方式来实现,研究有结果就发上来,同时期待iceman的正规打法。。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-21 16:02:00
6#

回复 1# laonawuli 的帖子

hello ~
1# 的 Case 可以通过重载 TextCellType 单元格类型来实现,然后重载其 GetEditorControl() 方法,把 Editor 置成 TextBox,这样我们就可以进行操作了,代码如下:

  1.      public class MyCellType : FarPoint.Win.Spread.CellType.TextCellType
  2.     {
  3.         TextBox test = new TextBox();
  4.         public override Control GetEditorControl(Control parent, FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
  5.         {
  6.          
  7.             test.BorderStyle = BorderStyle.None;
  8.             return test;
  9.         }
  10.         public override void SetEditorValue(object value)
  11.         {
  12.             test.Text = value.ToString();
  13.         }
  14.         public override object GetEditorValue()
  15.         {
  16.             return test.Text;
  17.         }
  18.     }
复制代码
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2011-12-21 16:21:00
7#
原帖由 iceman 于 2011-12-21 16:02:00 发表
hello ~
1# 的 Case 可以通过重载 TextCellType 单元格类型来实现,然后重载其 GetEditorControl() 方法,把 Editor 置成 TextBox,这样我们就可以进行操作了,代码如下:
[code]
public class MyCellType : FarPoi......


哇塞 真牛!!真牛! Farpoint与iceman简直无所不能!
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2011-12-21 16:25:00
8#
原帖由 iceman 于 2011-12-21 16:02:00 发表
hello ~
1# 的 Case 可以通过重载 TextCellType 单元格类型来实现,然后重载其 GetEditorControl() 方法,把 Editor 置成 TextBox,这样我们就可以进行操作了,代码如下:
[code]
public class MyCellType : FarPoi......


这里又有一个问题了哈!

请问如果我用了这个自定义的CellType,那么是不是界面上有多少个Cell,就有多少个TextBox了呢?
这样会不会占用很多内存。你知道的,如果一个Form里放上一大堆TextBox,是会很卡的
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-21 16:46:00
9#

回复 8# laonawuli 的帖子

laonawuli 好,

1.无论是自定义 CellType,还是 Spread 提供的 CellType ,在创建这个 CellType 实例时我们都会有一个对应的 Editor ,并且无论 把这个 CellType 赋给多少个 Cell ,内存中也只有一个 Editor 。
2.不好意思,上边的代码需要做一下修改:

  1.        public override void SetEditorValue(object value)
  2.         {
  3.             if (value!=null)
  4.             {
  5.                 test.Text = value.ToString();
  6.             }
  7.             else
  8.             {
  9.                 test.Text = "";
  10.             }
  11.         }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-12-21 16:49:00
10#

回复 7# laonawuli 的帖子

过奖~过奖~还有很多要和 laonawuli  大侠互相学习,如果 Win32 API 研究有成果,可以写成知识库文章,我可以协助发表下~哈哈
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部