Удалить текстовое поле с кнопкой в отдельном классе

#c# #visual-studio #winforms #class #textbox

Вопрос:

Я хотел бы удалить значение из текстового поля «txtName» с помощью отдельного класса «Delete» с помощью methode .resetText(). я не получаю доступа к своему текстовому полю в этом отдельном классе. как я могу решить эту проблему?

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void butDelete_Click(object sender, EventArgs e)
    {
        Delete delete = new Delete();
    }
}


class Delete
{
    public Delete()
    {
        txtName.ResetText();
    }
}
 

Комментарии:

1. вы можете передать объект текстового поля в качестве параметра

Ответ №1:

Передайте объект текстового поля в качестве параметра.

 class Delete
{
    public Delete(TextBox txtName)
    {
        txtName.ResetText();
    }
}
 

Комментарии:

1. Как насчет ref TextBox txtName этого ?

2. @Аудитивный это обязательно ? Я так не думаю.

3.@Auditive ref , используемый здесь, будет означать, что вы можете создать новый экземпляр текстового поля внутри Delete и полностью заменить переданное текстовое поле новым.

Ответ №2:

Отправьте свое текстовое поле cotrol с параметром вашего метода удаления:

 
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void butDelete_Click(object sender, EventArgs e)
    {
        Delete delete = new Delete();
        delete.Delete(txtName);
    }
}


class Delete
{
    public Delete(Control control)
    {
         var txtBox = control as TextBox;
         if (txtBox == null)
            return;
         txtBox.ResetText();
    }
}

 

Комментарии:

1. Вам это не нужно: var txtBox = control as TextBox; : ResetText() принадлежит Control классу. Все было бы по-другому, если бы вы использовали Clear() метод, который принадлежит классу TextBoxBase. Но в этом случае вы бы добавили другое ограничение, public Delete(TextBoxBase control) . Проверка на нуль также не нужна, просто напишите control?.ResetText();

2. Контроль и база текстовых полей-это типы ссылок, я думаю, что это не имеет большого значения. Класс TextBoxBase также наследуется от элемента управления )

3. Это не имеет ничего общего со ссылочными типами, но с наследованием. Нет смысла определять параметр как Control control , а затем приводить к текстовому полю, если вам нужно использовать метод, принадлежащий классу управления. Просто определите параметр как TextBox или не приводите. Если вы хотите добавить ограничение в класс TextBox, добавьте его в параметр. В противном случае непонятно, почему передача кнопки в качестве аргумента ничего не делает.

4. я думаю, что это правильно! мой метод является более расширяемым, например, если в дальнейшем требуется выполнить сброс для RichTextBox или для ComboBox и т. Д.

5. Если вы хотите сделать его более универсальным, как упоминалось и описано, метод просто: public Delete(Control control) { control?.ResetText(); } . Теперь вы можете пройти любой контроль.

Ответ №3:

решенный

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void butDelete_Click(object sender, EventArgs e)
    {
        Delete delete = new Delete(txtName);
    }
}


class Delete
{
    public Delete(TextBox txtName)
    {
        txtName.ResetText();
    }
}