コード例 #1
0
ファイル: Textarea.cs プロジェクト: inmount/dyk.dll
        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) {


            }
        }
コード例 #2
0
ファイル: Textarea.cs プロジェクト: inmount/dyk.dll
        /// <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 = "";
        }