nisnfox 发表于 2012-4-13 10:29:00

Tx中TextFieldid模版位置定位

请问大神在Tx17版本中使用的是appField.bounds.location.x/y, 在Tx14中没有bounds这个属性,请问如何实现定位?谢谢谢!!

iceman 发表于 2012-4-13 12:29:00

回复 1# nisnfox 的帖子

nisnfox 你好,
TX 没有纯粹的 Location 定位,都是基于行列位置的定位。楼主可以尝试插入 TXTextControl.Table ,在 Table 单元格输入 TextFiled,进而实现定位。

nisnfox 发表于 2012-4-13 14:08:00

因为要 弹出一个 用户控件,所以要获取TextFieldid 的x y 位置,17.0用bounds.location.x
但是 14.0没有这个属性,那怎么获取!

iceman 发表于 2012-4-13 14:57:00

回复 3# nisnfox 的帖子

nisnfox 你好,
可以使用 InputPositionChanged 事件来获得当前行列值,从而进行判断当前光标是否在 TextFiled 范围内,逻辑判断是否弹出窗体。

      private void textControl1_InputPositionChanged(object sender, EventArgs e)
      {
            int col = this.textControl1.InputPosition.Column;
            int row = this.textControl1.InputPosition.Line;
            if (row == 1 && col == 1)
            {
                MessageBox.Show("Test");
            }
      }

nisnfox 发表于 2012-4-16 10:38:00

tx 14问题

      private void textControl1_TextFieldClicked(object sender, TXTextControl.TextFieldEventArgs e)
      {

            TXTextControl.ApplicationField appField = (TXTextControl.ApplicationField)e.TextField;

            FieldEditor editor = new FieldEditor();
            editor.SelectedField = appField;
            editor.UpdateField += new EventHandler(editor_UpdateField);
            editor.Cancel += new EventHandler(editor_Cancel);

            editor.SelectedField = textControl1.ApplicationFields.GetItem();

            Point tbLocation = new Point((appField.Bounds.Location.X -
                                          textControl1.ScrollLocation.X) / dpiX,
                                          (appField.Bounds.Location.Y -
                                          textControl1.ScrollLocation.Y) / dpiX);

            editor.Location = tbLocation;

            textControl1.Controls.Add(editor);
            editor.BringToFront();
            editor.Show();
      } Point tbLocation = new Point((appField.Bounds.Location.X -

                                          textControl1.ScrollLocation.X) / dpiX,

                                          (appField.Bounds.Location.Y -

                                          textControl1.ScrollLocation.Y) / dpiX);

这一段用tx 14怎么实现!

nisnfox 发表于 2012-4-16 10:40:00

Point tbLocation = new Point((appField.Bounds.Location.X -

                                          textControl1.ScrollLocation.X) / dpiX,

                                          (appField.Bounds.Location.Y -

                                          textControl1.ScrollLocation.Y) / dpiX);

iceman 发表于 2012-4-16 14:02:00

回复 6# nisnfox 的帖子

nisnfox 你好,
可以通过获取当前点击 TextField 第一个字符的 InputPosition 去获取 Point:

      private void textControl1_TextFieldClicked(object sender, TXTextControl.TextFieldEventArgs e)
      {
            //获取当前点击 TextField
            TXTextControl.TextField currentTextFiled = e.TextField;

            //获取当前行、列及 Page 索引
            int currentPageIndex=this.textControl1.InputPosition.Page;
            int startPositionX = currentTextFiled.Start;
            int startPositionY = this.textControl1.InputPosition.Line;

            //根据索引创建 InputPosition
            TXTextControl.InputPosition startPosition=new TXTextControl.InputPosition(currentPageIndex ,startPositionX ,startPositionY );

            //通过 ImputPostion 获取当前点击 TextField Point
            Point editorLocation = startPosition.Location;
      }

nisnfox 发表于 2012-4-16 16:59:00

不对
X=-1
Y=-1
达不到上面的效果

iceman 发表于 2012-4-16 17:33:00

回复 8# nisnfox 的帖子

nisnfox 你好,我在楼上代码中做了修改,如果有多行,楼主可以加逻辑判断。

//获取当前点击 TextField
            TXTextControl.TextField currentTextFiled = e.TextField;

            //获取当前行、列及 Page 索引
            int currentPageIndex=this.textControl1.InputPosition.Page;
            int lineLength = this.textControl1.Lines.Length ;
            int startPositionY = currentTextFiled.Start;
            
            //int startPositionX = this.textControl1.InputPosition.Line%lineLength;
            int startPositionX = this.textControl1.InputPosition.Line;

            //根据索引创建 InputPosition
            TXTextControl.InputPosition startPosition=new TXTextControl.InputPosition(currentPageIndex ,startPositionX ,startPositionY );

            this.textControl1.InputPosition = startPosition;

            //通过 ImputPostion 获取当前点击 TextField Point
            Point editorLocation = this.textControl1.InputPosition.Location;

nisnfox 发表于 2012-4-16 17:51:00

大师还是不对!
页: [1] 2
查看完整版本: Tx中TextFieldid模版位置定位