#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();
}
}