我自定义了一个TextBox控件,在TextBox的最右边加一个按钮,这个按钮的左右就是把文本框中的文字全都复制到剪贴板中。代码如下
    class MyTextBox:TextBox
    {
        private Button button1;        public MyTextBox()
            : base()
        {
            button1 = new Button();            button1.Text = "复制";
            button1.Size = new Size(30, this.ClientSize.Height);
            button1.UseVisualStyleBackColor = true;
            button1.Font = new Font("宋体", 6f);
            button1.Cursor = Cursors.Default;            button1.Dock = DockStyle.Right;            button1.Click += new EventHandler(button1_click);            this.Controls.Add(button1);
        }        private void button1_click(object o, EventArgs e)
        {
            this.SelectAll();
            this.Copy();
        }
        
    }但是现在有一个问题就是,当我在文本框中输入的时候,如果输入的文本比较长,超过了文本框的长度,那么最右边的文本会被这个按钮遮住。我如何去实现,当输入的文本超过按钮的位置时,可以像输入文字达到文本框的最右边时那样,把整个文本都向左移动,使这些文字不会被按钮遮住。就好像文本框最右面的边界是在按钮之前一样。(不知道我又没有描述清楚,希望大家能够看明白我说的意思)

解决方案 »

  1.   

    如果是我做的话,就不要继承TextBox,继承control就可以了,把textbox和button一起添加到这个控件下。
      

  2.   

    很奇怪的需求,那可能就要重写onpaint方法了
      

  3.   

    可以设置它的自动换行属性吧。Multiline
      

  4.   

    一个无边框的TextBox 两个按钮,加一个Rectangle
      

  5.   

    新建用户控件
    放置按钮放在文本框外面
    修改一下文本框的边框属性为NONE
    在文本框和按钮外面再套一个PANEL,设置一下边框为FixedSingle
      

  6.   

    public abstract class TextBoxBase : Control 
           //
            // 摘要:
            //     获取或设置用户可在文本框控件中键入或粘贴的最大字符数。
            //
            // 返回结果:
            //     可以在文本框控件中输入的字符数。默认值为 32767。
            [DefaultValue(32767)]
            [Localizable(true)]
            public virtual int MaxLength { get; set; }
      

  7.   

    1. 最好的方式是继承自Control,然后里面放一个TextBox和一个Button2. 如果非要继承自TextBox,那么就自己处理OnPaint函数,自己检测输入的数据长度是否超过TextBox.Length - Button.Length,如果是,则字画部分数据
      

  8.   


    是一个TextBox和两个按钮组合起来?这样就和1楼的差不多了。呵呵。