Сделать TextBox редактируемым с помощью ContextMenuStrip - C# winform

У меня есть текстовое поле в моей C# Winform. Программа присваивает значение текстовому полю по умолчанию.

Я хочу, чтобы у пользователя была функция правого клика для редактирования этого текста во время выполнения. Поэтому, когда пользователь щелкает правой кнопкой мыши для редактирования, фон должен стать белым, и пользователь должен иметь возможность редактировать текст. А после редактирования фон должен вернуться к значению по умолчанию и не редактироваться

Я создал ContextMenuStrip с событием правой кнопки мыши, чтобы редактировать текст следующим образом, и присвоил свойству readonly значение false, когда пользователь щелкает правой кнопкой мыши и нажимает элемент меню редактирования:

private void editTextToolStripMenuItem_Click(object sender, EventArgs e)
{
    itxt_CommonTitle.ReadOnly = false;
}

Я не уверен, что делать дальше. Возможно ли это с помощью текстового поля?

2 ответа

Решение

Если вы не изменили BackColor из TextBox в дизайнере цвет фона должен автоматически меняться с белого на серый, когда вы устанавливаете ReadOnly = true и изменить с серого обратно на белый, когда вы установите ReadOnly = false, Однако, если вы изменили его на что-то другое в конструкторе, то самый простой способ - просто установить личную переменную, чтобы она запоминала оригинал. BackColor прежде чем включить элемент управления для редактирования. Затем вы можете восстановить цвет после того, как вы установите его обратно только для чтения.

private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
    MakeTextBoxEditable(itxt_CommonTitle);
}

private void itxt_CommonTitle_Leave(object sender, EventArgs e)
{
    MakeTextBoxReadOnly(itxt_CommonTitle);
}

private void Form1_Click(object sender, EventArgs e)
{
    MakeTextBoxReadOnly(itxt_CommonTitle);
}


private Color origTextBoxBackColor = SystemColors.Control;

private void MakeTextBoxEditable(TextBox textBox)
{
    origTextBoxBackColor = textBox.BackColor;
    textBox.ReadOnly = false;
    textBox.BackColor = Color.White;
    textBox.Focus();
}

private void MakeTextBoxReadOnly(TextBox textBox)
{
    textBox.ReadOnly = true;
    textBox.BackColor = origTextBoxBackColor;
}

Я думаю, что вы пропустили процесс. После редактирования должен быть метод обновления или сохранения.

  1. текстовое поле только для чтения = правда;
  2. редактировать текстовое поле: текстовое поле readonly = false;
  3. кнопка сохранить: текстовое поле readonyl = true;

Редактировать: что-то вроде этого:

    private void buttonSave_Click(object sender, EventArgs e)
    {
        textBox1.ReadOnly = true;
    }

    private void editToolStripMenuItem_Click(object sender, EventArgs e)
    {
        textBox1.ReadOnly = false;
    }

Вам не нужно менять backColor, просто readonly prop - это хорошо.

Другие вопросы по тегам