コード例 #1
0
ファイル: TextBox.cs プロジェクト: yadiate/MonoGameGui
        protected internal override void CharEntered(CharacterEventArgs e)
        {
            var ch = e.Character;

            lock (RenderRule) {
                switch (ch)
                {
                case '\b': {
                    //Backspace <= remove selected or remove before cursor
                    if (RenderRule.HasSelected)
                    {
                        RenderRule.RemoveSelected();
                    }
                    else
                    {
                        RenderRule.BackSpace();
                    }
                    break;
                }

                case '\n':
                case '\r': {
                    //New Line <= Insert character after cursor
                    if (RenderRule.HasSelected)
                    {
                        RenderRule.RemoveSelected();
                    }
                    RenderRule.Insert(ch);
                    break;
                }

                case '\t': {
                    //Tabs currently not supported
                    return;
                }

                case (char)3: {
                    //Copy
                    Clipboard.SetDataObject(RenderRule.GetSelected(), true);
                    break;
                }

                case (char)22: {
                    //Paste
                    if (RenderRule.HasSelected)
                    {
                        RenderRule.RemoveSelected();
                    }

                    var dataObject = Clipboard.GetDataObject();
                    if (dataObject != null)
                    {
                        var text = dataObject.GetData(DataFormats.Text).ToString();
                        RenderRule.Insert(text);
                    }
                    break;
                }

                case (char)24: {
                    //Cut
                    if (RenderRule.HasSelected)
                    {
                        Clipboard.SetDataObject(RenderRule.GetSelected(), true);
                        RenderRule.RemoveSelected();
                    }
                    break;
                }

                default: {
                    //Add the character
                    if (RenderRule.HasSelected)
                    {
                        RenderRule.RemoveSelected();
                    }
                    RenderRule.Insert(ch);
                    RenderRule.SelectedChar = null;
                    break;
                }
                }
                RenderRule.BakeText();
            }

            ResetTimer();
        }