yty 发表于 2018-7-24 16:18:02

表格中设置选区的bug

Winform中拖入一TextControl,运行后删掉默认文字(此时文档内容为空),然后插入一个4行5列表格。此时,若我执行语句      textControl1.Selection=new Selection (3,2); 我期望的结果是选择了表格的第一行后两列。然而,tx只把插入点定位在了第一行第四列(即插入点3处),选区的长度仍为0。通过调试也可以发现,我执行完 textControl1.Selection=new Selection (3,2); 后立即打印当前Selection.Length,结果是0。这个bug如何避免?或者说,如何用代码执行选择第一行后两列这个操作?


Richard.Ma 发表于 2018-7-24 18:04:27

您好,测试以下代码可以实现功能,请参考

            Table tb = _textControl.Tables.GetItem(0);
            int start=0,length=0;
            foreach (TableCell cell in tb.Cells)
            {

                if (cell.Row == 2 && cell.Column == 2)
                  start=cell.Start;
                if (cell.Row == 2 && cell.Column == 4)
                  length = cell.Start+cell.Length-start;
            }
            _textControl.Selection = new TXTextControl.Selection(start,length);

yty 发表于 2018-7-24 18:21:36

本帖最后由 yty 于 2018-7-24 18:22 编辑

Richard.Ma 发表于 2018-7-24 18:04
您好,测试以下代码可以实现功能,请参考
我要选择最后两列,不是中间的两列


或者你提供的代码不要变,表格建成4列的,执行完选区长度还是0

Richard.Ma 发表于 2018-7-25 11:32:48

tx提供了表格select方法来做这个操作,如下代码可以对4×4的表格中的第二行三四列进行选中

            Table tb = _textControl.Tables.GetItem(0);
            tb.Select(2, 3, 2, 4);

yty 发表于 2018-7-25 13:08:01

Richard.Ma 发表于 2018-7-25 11:32
tx提供了表格select方法来做这个操作,如下代码可以对4×4的表格中的第二行三四列进行选中

经测试可以。所以如果我之前有一个Selection,正好选择了表格的一部分,后面我想恢复这个选区,那只能手动换算选区对应的单元格坐标了吗?

Richard.Ma 发表于 2018-7-25 17:21:17

是的
页: [1]
查看完整版本: 表格中设置选区的bug