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

gyyggyy 2011-08-12 11:06:21
我自定义了一个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();
}

}

但是现在有一个问题就是,当我在文本框中输入的时候,如果输入的文本比较长,超过了文本框的长度,那么最右边的文本会被这个按钮遮住。我如何去实现,当输入的文本超过按钮的位置时,可以像输入文字达到文本框的最右边时那样,把整个文本都向左移动,使这些文字不会被按钮遮住。就好像文本框最右面的边界是在按钮之前一样。(不知道我又没有描述清楚,希望大家能够看明白我说的意思)
...全文
123 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
或者说文本框本身就有个属性,用来设置这个实际输入的长度。有木有?
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
没有现成的方法?比如设置一下文本框实际的输入长度(不是字符长度),就好像把文本框的长度有100,按钮的长度有30,然后有个方法把本文框实际的输入长度设置成100-30,有吗?
xiaoyu821120 2011-08-12
  • 打赏
  • 举报
回复
很奇怪的需求,那可能就要重写onpaint方法了
honkerhero 2011-08-12
  • 打赏
  • 举报
回复
能不能设置文字的右边距 = 按钮的宽呢? 就是把文字右边留白,把按钮正好放空白的地方。
一个思路,没有做过
毛线 2011-08-12
  • 打赏
  • 举报
回复
帮你顶一下。。。。看看别的人了!!
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
我知道这样可以避免我的问题,但是我现在需要把按钮放在文本框内,所以希望大家帮个忙。
xiaoyu821120 2011-08-12
  • 打赏
  • 举报
回复
如果是我做的话,就不要继承TextBox,继承control就可以了,把textbox和button一起添加到这个控件下。
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 assky124 的回复:]

一个无边框的TextBox 两个按钮,加一个Rectangle
[/Quote]

是一个TextBox和两个按钮组合起来?这样就和1楼的差不多了。呵呵。
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 thg8888 的回复:]

可以设置它的自动换行属性吧。Multiline
[/Quote]

和多行没有关系,呵呵。
gyyggyy 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 honkerhero 的回复:]

能不能设置文字的右边距 = 按钮的宽呢? 就是把文字右边留白,把按钮正好放空白的地方。
一个思路,没有做过
[/Quote]

没看懂,呵呵。
Just4life 2011-08-12
  • 打赏
  • 举报
回复
1. 最好的方式是继承自Control,然后里面放一个TextBox和一个Button

2. 如果非要继承自TextBox,那么就自己处理OnPaint函数,自己检测输入的数据长度是否超过TextBox.Length - Button.Length,如果是,则字画部分数据
lsxing9519 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 net_jun 的回复:]
新建用户控件
放置按钮放在文本框外面
修改一下文本框的边框属性为NONE
在文本框和按钮外面再套一个PANEL,设置一下边框为FixedSingle
[/Quote]
这个可以有
劉宏哲 2011-08-12
  • 打赏
  • 举报
回复
这种情况应该使用用户控件,不应该用自定义控件。用户控件就是把基础控件进行一个组合。
dazhabai 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gyyggyy 的回复:]

或者说文本框本身就有个属性,用来设置这个实际输入的长度。有木有?
[/Quote]


public abstract class TextBoxBase : Control
//
// 摘要:
// 获取或设置用户可在文本框控件中键入或粘贴的最大字符数。
//
// 返回结果:
// 可以在文本框控件中输入的字符数。默认值为 32767。
[DefaultValue(32767)]
[Localizable(true)]
public virtual int MaxLength { get; set; }
net_jun 2011-08-12
  • 打赏
  • 举报
回复
新建用户控件
放置按钮放在文本框外面
修改一下文本框的边框属性为NONE
在文本框和按钮外面再套一个PANEL,设置一下边框为FixedSingle
assky124 2011-08-12
  • 打赏
  • 举报
回复
一个无边框的TextBox 两个按钮,加一个Rectangle
THG8888 2011-08-12
  • 打赏
  • 举报
回复
可以设置它的自动换行属性吧。Multiline

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧