找回密码
 立即注册

QQ登录

只需一步,快速开始

etsoft
中级会员   /  发表于:2014-1-7 10:05:00
11#
如果我预插入了几个textfield,并且将其 Deleteable 、Editable 属性值都设为 false;当光标从别的地方再点回最后一个textfield的后面,此时希望通过textcontrol.changed事件,获取输入的字符,并将该字符存进一个新的textfield内。
贴上代码:
        private void Form1_Load(object sender, EventArgs e)
        {

            for (int i = 0; i < 3; i++)
            {
                TextField tf = new TextField();
                tf.Name = i.ToString();
                tf.Text = i.ToString();
                tf.Deleteable = false;
                tf.Editable = false;
                this.textControl1.TextFields.Add(tf);
            }
}
        private void textControl1_Changed(object sender, EventArgs e)
        {
            string currentName = "删除人"; //当前删除人
            TextControl tce = (TextControl)sender;
            int delID = 0;
            int currentLine = tce.InputPosition.Line;
            int currentColumn = tce.InputPosition.Column;
            int currentPage = tce.InputPosition.Page;
            int start = tce.InputPosition.TextPosition;
            int length = 1;
            tce.Selection.Start = start - 1;
            tce.Selection.Length = length;
            tce.Selection.ForeColor = Color.LightSkyBlue;
            tce.Selection.Underline = FontUnderlineStyle.SingleWordsOnly;
            TextField delTextField = new TextField();
            delTextField.ID = delID;
            delID++;
            delTextField.Name += "由 " + currentName + " 在 " + DateTime.Now.ToString() + " 插入.#";
            delTextField.Text = tce.Selection.Text;
            tce.Selection.Text = "";
            tce.TextFields.Add(delTextField);
            tce.InputFormat.TextColor = Color.Black;
            tce.InputFormat.Strikeout = false;
        }
        private void textControl1_TextFieldClicked(object sender, TextFieldEventArgs e)
        {
            this.textControl1.Select(e.TextField.Start, 1);

            string selectText = this.textControl1.Selection.Text;

            this.textControl1.Selection.Text = " " + selectText;



            this.textControl1.Select(e.TextField.Start, 1);



            this.textControl1.Selection.Text = "";
        }

        private void changed事件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textControl1.Changed+=new EventHandler(textControl1_Changed);
        }
这个是否可以认为是插入点停留在了最后一个textfield内?用了4#的代码,也还是一样的效果
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-1-8 13:52:00
12#
回复 11楼etsoft的帖子

etsoft 你好,
使用你的代码我可以在最后一个 TextField 后面任意插入字符,并且插入 textfield 成功:

Demo3.gif

这是我使用的 Demo:
11458_2.zip (40.44 KB, 下载次数: 437)
回复 使用道具 举报
etsoft
中级会员   /  发表于:2014-1-8 16:57:00
13#
iceman 你好,与你的demo有一点不同,当打开textcontrol时,先插入几个textfiled,并将其                tf.Deleteable = false;
tf.Editable = false;
textfiled的后面不要有任何字符,全是带有以上两个属性的textfield,然后在最后一个textfield的后面插入一个带有
tf.Deleteable = true;
tf.Editable = true;
的textfiled。


11458_2.rar (43.06 KB, 下载次数: 423)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-1-8 17:45:00
14#
回复 13楼etsoft的帖子

恩,问题我重现了,这可能是 TX 的设计。我需要询问厂商。有结果给你反馈。
回复 使用道具 举报
etsoft
中级会员   /  发表于:2014-1-8 19:42:00
15#
感谢您的辛勤回复,很期待结果,这个功能对我们公司来说至关重要
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-1-9 11:23:00
16#
回复 15楼etsoft的帖子

不客气,应该做的,有进展反馈给你。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-1-10 12:18:00
17#
回复 15楼etsoft的帖子

厂商反馈,如果需要在 TextField 之后添加其他元素,需要有至少一个字符的占位。
所以,我们可以在每次插入 TextField 后插入一个空格,在点击后通过程序选中这个空格,这样既可以无限制插入 TextField,详细请参考Demo:

11458_2.zip (47.15 KB, 下载次数: 457)
回复 使用道具 举报
etsoft
中级会员   /  发表于:2014-1-10 15:52:00
18#
这样会带来很多问题呢,要是一个字符产生一个textfield,将字符装入textfield内,那看起来每个字符间不就是都有一个空格呀
回复 使用道具 举报
etsoft
中级会员   /  发表于:2014-1-10 16:09:00
19#
如果每插入一个字符都要记录下来,还有没有别的实现方式?不使用textfield的方式有吗?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-1-10 17:07:00
20#
回复 18楼etsoft的帖子

18 # 我理解可以通过编写逻辑来避免这个问题,不知道17#中的 Demo 楼主测试了没有?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部