如何在文本框中添加按钮?

时间:2009-12-07 16:37:00

标签: c# winforms

我正在尝试使用右侧的按钮创建一个TextBox。 我的代码:

public partial class TextBoxButton : TextBox
{
    [Category("Button")]
    [Description("Button in textbox")]
    public Button Button
    {
        get
        {
            return this.btn;
        }
        set
        {
            this.btn = value;
        }
    }

    protected override void OnCreateControl()
    {
        if (!this.Controls.Contains(this.btn))
        {
            this.Controls.Add(this.btn);
            this.btn.Dock = DockStyle.Right;
        }

        base.OnCreateControl();
    }
}

每次当我启动appi并在按钮中设置一些文本或图像时,它都是空的。一些想法?

最好的问候。

5 个答案:

答案 0 :(得分:6)

不要将Button添加到TextBox中,而是使用一些容器(Control或UserControl并在其中添加TextBox和Button)。

答案 1 :(得分:2)

你必须告诉设计师它还应该序列化按钮的属性:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Button Button {
    //...
}

默认为隐藏,因此不会将任何按钮属性写入Designer.cs文件。设置,例如,Text属性在设计器中起作用,但在启动应用程序或重新加载表单后属性值将丢失。

答案 2 :(得分:1)

首先是一个问题: 你在TextBox的侧面需要一个或多个Button吗? 因此,您需要一个按钮或一个按钮或一个集合的按钮

如果Button不是那么复杂,你必须做很多具体的功能, 你使用UserControl。这是正确的方式。 否则你必须采取CustomControl,更多的工作。

逻辑步骤:

  • 从上面创建一个给定的控件
  • 制作属性按钮或按钮
  • 使用Docking-Layout,更容易

答案 3 :(得分:0)

不确定“在文本框中”的含义。您的意思是您希望按钮覆盖文本框的右侧,或位于文本框的右侧(但不重叠)?

我不确定您的要求是什么,但我可能会在可视设计器中执行此操作而不是尝试在代码中执行此操作:

  1. 创建新控件
  2. 创建一个包含两列的表容器 1排。
  3. 将文本框放入 左侧单元格,以及中的按钮 正确的细胞。

答案 4 :(得分:0)

如果确实想要将按钮添加到文本框中,请按以下步骤操作:

  • 创建一个新的C#WinForms项目
  • 在表单上放置新的多行文本框
  • 将以下代码粘贴到Load事件中:

    Button btn = new Button();
    btn.Parent = textBox1;
    btn.BringToFront();            
    textBox1.Controls.Add(btn);
    
    btn.BackColor = Color.Gray;
    btn.Text = "Help!";
    

正如您所看到的那样,该按钮隐藏了无用的文本,但它看起来似乎完全正常。

我相信你真正想做的是将按钮放在文本框的旁边。也许使用 Panel 控件来包含两个控件。

每当您将控件添加到另一个控件 - 控件集合时,您必须将父控件设置为您已将其添加到的控件。 Capiche? (抱歉这个讽刺;)

换句话说,您没有将文本框设置为按钮的父控件。

另外,WPF可能有能力执行此操作来围绕按钮流动文本!