C#为自定义文本框设置默认文本

C#为自定义文本框设置默认文本,c#,textbox,C#,Textbox,我试图创建一个自定义文本框,当拖放到表单中时,它会显示“customTextBox1”、“customTextBox2”,就像标签和按钮中出现的情况一样 我试着这样做: public CustomTextBox() { InitializeComponent(); ReadOnly = true; TabStop = false; BorderStyle = BorderStyle.None; Te

我试图创建一个自定义文本框,当拖放到表单中时,它会显示“customTextBox1”、“customTextBox2”,就像标签和按钮中出现的情况一样

我试着这样做:

    public CustomTextBox()
    {
        InitializeComponent();

        ReadOnly = true;
        TabStop = false;
        BorderStyle = BorderStyle.None;
        Text = "customTextBox";
    }
其他属性工作正常,但要显示文本,我需要在拖动customTextBox后生成或启动程序,否则文本将保持为空,并且在拖动更多customTextBox后customTextBox的编号不会增加


注意:我不想要任何占位符或类似的东西。

您的问题是此线程的部分重复,但那里的答案并不完全适用,因为您继承的是
文本框,而不是
用户控件
,并且初始化例程有点不同。按照您的要求执行操作根本不直观,这很不幸,因为所有默认文本控件在最初由设计器创建时都将其
text
属性设置为其
Name
属性

诀窍是只为您的组件实现一个
ControlDesigner
(来自
System.Windows.Forms.Design
)<代码>控件设计器。每当在窗体上创建新控件时,WinForms设计器将调用一次InitializeNewComponent
。这是您将
Text
属性设置为
Name
属性的机会,而不会对非设计代码产生副作用,也不会干扰设计器对组件的序列化

我在设计器中验证了这一点-它正确地设置了
文本
字段,以匹配设计器生成的
名称
字段,但一旦设计器创建了控件,
文本
名称
字段将保持单独的可编辑状态,就像在默认的
文本框
标签
控件中一样

若要执行此操作,必须向
System.Design
添加项目引用,该项目引用包含
System.Windows.Forms.Design
命名空间

使用系统集合;
使用系统组件模型;
使用System.Windows.Forms;
使用System.Windows.Forms.Design;
命名空间StackOverflowAnswers.CustomControlDefaultText
{
类CustomTextBoxDesigner:ControlDesigner
{
公共CustomTextBoxDesigner()
{
}
public override void InitializeNewComponent(IDictionary defaultValues)
{
//允许基本实现设置默认值,
//由设计师提供。
base.InitializeNewComponent(默认值);
//现在所有的基本属性都设置好了,我们
//在这里做一小步。组件是
//由ControlDesigner公开并引用的属性
//正在设计的当前IComponent。
CustomTextBox myTextBox=组件作为CustomTextBox;
如果(myTextBox!=null)
{
Text=myTextBox.Name;
}
}
}
//此属性设置TextBox派生版本的设计器
[Designer(typeof(CustomTextBoxDesigner))]
类CustomTextBox:TextBox
{
公共CustomTextBox():base()
{
只读=真;
TabStop=false;
BorderStyle=BorderStyle.None;
}
}
}

我收到三个错误1)找不到ControlDesigner 2)“CustomTextBoxDesigner.InitializeNewComponent(IDictionary)”:找不到合适的方法来重写3)组件是一个类型,在给定的上下文中无效。您是否使用我提供的代码示例顶部的语句包含了所有的
,使用System.Windows.Forms.Design;虽然看起来没用,但在可视化研究中它会变成灰色。您使用的是哪个版本的.NET?我在测试项目中使用了.NET 4.5.2,我将整个CustomTextBox.cs文件复制并粘贴到这里的代码示例中。您只需要将
名称空间StackOverflowAnswers.CustomControlDefaultText
行更改为您自己的名称空间,它应该可以工作。刚刚意识到我忘记了什么。您需要将项目引用添加到
系统。设计
以使其正常工作。我把它漏掉的错误。我将相应地编辑我的答案。