当前位置:编程学习 > C#/ASP.NET >>

自定义TextBox控件的问题,请帮忙看看

我自定义了一个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();
        }
        
    }

但是现在有一个问题就是,当我在文本框中输入的时候,如果输入的文本比较长,超过了文本框的长度,那么最右边的文本会被这个按钮遮住。我如何去实现,当输入的文本超过按钮的位置时,可以像输入文字达到文本框的最右边时那样,把整个文本都向左移动,使这些文字不会被按钮遮住。就好像文本框最右面的边界是在按钮之前一样。(不知道我又没有描述清楚,希望大家能够看明白我说的意思) --------------------编程问答-------------------- 如果是我做的话,就不要继承TextBox,继承control就可以了,把textbox和button一起添加到这个控件下。 --------------------编程问答-------------------- 我知道这样可以避免我的问题,但是我现在需要把按钮放在文本框内,所以希望大家帮个忙。 --------------------编程问答-------------------- 帮你顶一下。。。。看看别的人了!! --------------------编程问答-------------------- 能不能设置文字的右边距 = 按钮的宽呢? 就是把文字右边留白,把按钮正好放空白的地方。
 一个思路,没有做过 --------------------编程问答-------------------- 很奇怪的需求,那可能就要重写onpaint方法了 --------------------编程问答-------------------- 没有现成的方法?比如设置一下文本框实际的输入长度(不是字符长度),就好像把文本框的长度有100,按钮的长度有30,然后有个方法把本文框实际的输入长度设置成100-30,有吗? --------------------编程问答-------------------- 或者说文本框本身就有个属性,用来设置这个实际输入的长度。有木有? --------------------编程问答-------------------- 可以设置它的自动换行属性吧。Multiline --------------------编程问答-------------------- 一个无边框的TextBox 两个按钮,加一个Rectangle --------------------编程问答-------------------- 新建用户控件
放置按钮放在文本框外面
修改一下文本框的边框属性为NONE
在文本框和按钮外面再套一个PANEL,设置一下边框为FixedSingle
--------------------编程问答--------------------
引用 7 楼 gyyggyy 的回复:
或者说文本框本身就有个属性,用来设置这个实际输入的长度。有木有?



public abstract class TextBoxBase : Control 
       //
        // 摘要:
        //     获取或设置用户可在文本框控件中键入或粘贴的最大字符数。
        //
        // 返回结果:
        //     可以在文本框控件中输入的字符数。默认值为 32767。
        [DefaultValue(32767)]
        [Localizable(true)]
        public virtual int MaxLength { get; set; }
--------------------编程问答-------------------- 这种情况应该使用用户控件,不应该用自定义控件。用户控件就是把基础控件进行一个组合。 --------------------编程问答--------------------
引用 10 楼 net_jun 的回复:
新建用户控件
放置按钮放在文本框外面
修改一下文本框的边框属性为NONE
在文本框和按钮外面再套一个PANEL,设置一下边框为FixedSingle

   这个可以有
--------------------编程问答-------------------- 1. 最好的方式是继承自Control,然后里面放一个TextBox和一个Button

2. 如果非要继承自TextBox,那么就自己处理OnPaint函数,自己检测输入的数据长度是否超过TextBox.Length - Button.Length,如果是,则字画部分数据 --------------------编程问答--------------------
引用 4 楼 honkerhero 的回复:
能不能设置文字的右边距 = 按钮的宽呢? 就是把文字右边留白,把按钮正好放空白的地方。
 一个思路,没有做过


没看懂,呵呵。 --------------------编程问答--------------------
引用 8 楼 thg8888 的回复:
可以设置它的自动换行属性吧。Multiline


和多行没有关系,呵呵。 --------------------编程问答--------------------
引用 9 楼 assky124 的回复:
一个无边框的TextBox 两个按钮,加一个Rectangle


是一个TextBox和两个按钮组合起来?这样就和1楼的差不多了。呵呵。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,