protected override void OnKeyChar(int keycode) { base.OnKeyChar(keycode); int code = keycode; int nRes = PointCompared(gSelectStart, gSelectEnd); gEditLine = false;//先隐藏编辑线处理 switch (code) { case 8://退格 if (nRes == 0) { string szText = gItems[gSelectEnd.Y].Text; if (gSelectEnd.X > 0) { //删除前面一行 gItems[gSelectEnd.Y].Text = szText.Substring(0, gSelectEnd.X - 1) + szText.Substring(gSelectEnd.X); SetSelectPos(gSelectEnd.X - 1, gSelectEnd.Y); } else { if (gSelectEnd.Y > 0) { //将本行内容附加到上一行 gItems[gSelectEnd.Y - 1].Text += szText; //清除本行内容 Pool.ObjectPool.UnRegisterByID(gItems[gSelectEnd.Y].ID); gItems.RemoveAt(gSelectEnd.Y); //重新设置子对象的位置 ResetChildrenPos(); SetSelectPos(gItems[gSelectEnd.Y - 1].Text.Length, gSelectEnd.Y - 1); } } } break; case 9://Tab break; case 13://回车 if (nRes == 0) { string szText = gItems[gSelectEnd.Y].Text; //截断当前行 gItems[gSelectEnd.Y].Text = szText.Substring(0, gSelectEnd.X);// +chr + szText.Substring(gSelectEnd.X); //添加新的一行 TextAreaClass.LineText lt = new TextAreaClass.LineText(this); lt.Text = szText.Substring(gSelectEnd.X); //lt.SetPostion(nLeft, nTop); Pool.ObjectPool.Register(lt); this.Controls.Add(lt); //gItems.Add(lt); gItems.Insert(gSelectEnd.Y + 1, lt); //重新设置子对象的位置 ResetChildrenPos(); SetSelectPos(0, gSelectEnd.Y + 1); } break; default: char chr = code > 0 && code < 256 ? Convert.ToChar(code) : Convert.ToChar((int)(code & 0xffff)); //System.Windows.Forms.MessageBox.Show(cnt.ToString()); if (nRes == 0) { string szText = gItems[gSelectEnd.Y].Text; gItems[gSelectEnd.Y].Text = szText.Substring(0, gSelectEnd.X) + chr + szText.Substring(gSelectEnd.X); SetSelectPos(gSelectEnd.X + 1, gSelectEnd.Y); } //if (gSelectStart == gSelectEnd) { // if (base.Text.Length >= gnMaxLength) return; // base.Text = base.Text.Substring(0, gSelectStart) + chr + base.Text.Substring(gSelectStart); // gSelectStart++; // gSelectEnd = gSelectStart; //} else if (gSelectEnd > gSelectStart) { // base.Text = base.Text.Substring(0, gSelectStart) + chr + base.Text.Substring(gSelectEnd); // gSelectStart++; // gSelectEnd = gSelectStart; //} else { // base.Text = base.Text.Substring(0, gSelectEnd) + chr + base.Text.Substring(gSelectStart); // gSelectEnd++; // gSelectStart = gSelectEnd; //} gEditLine = true; //base.Refresh(); gItems[gSelectEnd.Y].RefreshWithEditLine(gSelectEnd.X); break; } if (code != 13 && code != 9 && code != 8) { } }
/// <summary> /// 设置空本文 /// </summary> private void SetNullText() { int nTop = 0; int nLeft = 0; TextAreaClass.LineText lt = new TextAreaClass.LineText(this); lt.SetPostion(nLeft, nTop); Pool.ObjectPool.Register(lt); this.Controls.Add(lt); gItems.Add(lt); lt.Text = ""; }