Редактируемый текст кнопки - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть кнопка, созданная во время выполнения

Button myBtn = new Button();
Initialize(myBtn);
myBtn.Click += myBtn_Click();
myBtn.Text="Add or Edit Text";//default text string

, когда пользователь click myBtn, она подсвечивает существующий текст и редактируется, и пользователь может ввести любой новый text.

Как я могу сделать button control редактируемым во время click event?

После того, как пользователь нажмет и введет любую строку, результат будет myBtn.Text = "Any Text"

Пример: myBtn.Text="Add or Edit Text"; // до нажатия

myBtn.Text="any text or string that user type it"; // после нажатия

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете добавить TextBox к элементу управления Button и создать элемент управления EditableButton, используя следующие методы и свойства:

  • EditMode: Получить или установить способ редактированияначнет.Это может быть OnPressF2, OnClick, Programmatically.В зависимости от значения этого свойства, редактирование начнется с нажатия F2 или на Click или вашего кода, вызывающего BeginEdit.

  • BeginEdit():Начинает редактирование, показывая TextBox.

  • EndEdit(): Заканчивает редактирование, скрывает текстовое поле и фиксирует текст TextBox как текст Button.
  • CancelEdit(): Отменяет редактирование и скрываеттекстовое поле.
  • IsEditing: определяет, находится ли элемент управления в режиме редактирования и отображается ли TextBox.

  • Нажмите Enter для завершения редактирования и фиксации текста.

  • Нажмите Escape , чтобы отменить редактирование и отменить изменения.

EditableButton

Вот пример кнопочного элемента управления, имеющего вышеуказанные свойства и методы.Вы можете улучшить его, добавив некоторые события, такие как BeginingEditing или EndingEdit или выставив некоторые свойства или события TextBox.

using System;
using System.Windows.Forms;

public class EditablButton : Button
{
    private TextBox txt;
    public enum EditModes { OnPressF2, OnClick, Programmatically }
    public EditModes EditMode { get; set; } = EditModes.OnPressF2;
    public bool IsEditing => txt.Visible;
    public EditablButton()
    {
        txt = new TextBox();
        txt.TextAlign = HorizontalAlignment.Center;
        txt.Visible = false;
        txt.Multiline = true;
        txt.Dock = DockStyle.Fill;
        this.Controls.Add(txt);
        txt.KeyDown += Txt_PreviewKeyDown;
    }
    private void Txt_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Enter)
        {
            EndEdit();
            e.Handled = true;
            e.SuppressKeyPress = true;
        }
        else if (e.KeyData == Keys.Escape)
        {
            CancelEdit();
            e.Handled = true;
            e.SuppressKeyPress = true;
        }
    }
    public void BeginEdit()
    {
        txt.Text = this.Text;
        txt.SelectAll();
        txt.Visible = true;
        txt.Focus();
    }
    public void EndEdit()
    {
        this.Text = txt.Text;
        txt.Visible = false;
        this.Focus();
    }
    public void CancelEdit()
    {
        txt.Visible = false;
        this.Focus();
    }
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (!IsEditing && EditMode == EditModes.OnPressF2 && keyData == Keys.F2)
        {
            BeginEdit();
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
    protected override void OnClick(EventArgs e)
    {
        if (EditMode == EditModes.OnClick)
            BeginEdit();
        else
            base.OnClick(e);
    }
}
0 голосов
/ 27 декабря 2018

Вы можете поместить текстовое поле, где пользователь может написать текст, а затем, нажав кнопку, вы можете установить текст:

myBtn.Text=txt_value.Text;

Или вы можете попробовать следующее, чтобы выделить текст:

Сделать TextBox по умолчанию Visible=False;

Вкл. myBtn_Click

txt_value.Visible=True;
myBtn.FontBold=True;
myBtn.Text=txt_value.Text; //to change the text each time the button is clicked
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...