Как добавить кнопку в текстовое поле? - PullRequest
0 голосов
/ 07 декабря 2009

Я пытаюсь сделать 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();
    }
}

Каждый раз, когда я запускаю свое приложение и устанавливаю какой-либо текст или изображение в кнопке, оно пустое. Некоторые идеи?

С уважением.

Ответы [ 5 ]

6 голосов
/ 07 декабря 2009

Вместо добавления Button в TextBox, используйте некоторый контейнер (Control или UserControl и добавьте TextBox и Button in).

2 голосов
/ 07 декабря 2009

Вы должны сообщить разработчику, что он также должен сериализовать свойства кнопки:

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

По умолчанию скрыто, поэтому ни одно из свойств кнопки не будет записано в файл Designer.cs. Например, настройка свойства Text работает в конструкторе, но значение свойства теряется после запуска приложения или перезагрузки формы.

1 голос
/ 21 октября 2010

Сначала вопрос: Вам нужна одна или несколько кнопок на боковой панели вашего TextBox? Таким образом, вам нужна кнопка свойства или кнопки для одной кнопки или коллекции

Если кнопка не настолько сложна, что вам приходится выполнять множество специфических функций, Вы используете UserControl. Это правильный путь. В противном случае вам придется взять CustomControl, больше работы.

Логические шаги:

  • Создайте один из заданных элементов управления сверху
  • Создание кнопки или кнопок свойства
  • Используйте Docking-Layout, это проще
0 голосов
/ 07 декабря 2009

Если вы действительно хотите добавить кнопку в текстовое поле, выполните следующие действия:

  • Создание нового проекта 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 может иметь возможность сделать это и для обтекания текста вокруг кнопки!

0 голосов
/ 07 декабря 2009

Не уверен, что вы подразумеваете под "в текстовом поле". Вы имеете в виду, что хотите, чтобы кнопка закрывала правую часть текстового поля или находилась справа от текстового поля (но не перекрывалась)?

Я не уверен, каковы ваши требования, но я бы, вероятно, сделал это в Visual Designer, а не пытался бы сделать это в коде:

  1. создать новый элемент управления
  2. создать контейнер таблицы с двумя столбцами и 1 ряд
  3. Поместите текстовое поле в левая ячейка и кнопка в правая ячейка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...