在单独的类中删除带有按钮的文本框

Posted

技术标签:

【中文标题】在单独的类中删除带有按钮的文本框【英文标题】:Delete TextBox with Button in separate Class 【发布时间】:2021-09-16 05:07:30 【问题描述】:

我想通过使用单独的类“Delete”和方法 .resetText() 从 TextBox 'txtName' 中删除值。 我无法在这个单独的类中访问我的 TextBox。 我该如何解决这个问题?

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】:

将文本框对象作为参数传递。

class Delete

    public Delete(TextBox txtName)
    
        txtName.ResetText();
    

【讨论】:

ref TextBox txtName 怎么样? @Auditive 是必需的吗?我不这么认为。 @Auditive ref 这里使用意味着您可以创建一个 TextBox within Delete 的新实例,并将传入的 TextBox 完全替换为新实例。 【参考方案2】:

使用 Delete 方法的参数发送您的文本框控制:


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


【讨论】:

你不需要这个:var txtBox = control as TextBox;ResetText() 属于Control 类。如果您使用属于 TextBoxBase 类的Clear() 方法,情况会有所不同。但是,在这种情况下,您将添加一个不同的约束,public Delete(TextBoxBase control)。空检查也不是必须的,写control?.ResetText(); Control 和 TextBoxBase 是引用类型,我认为这并不重要。 TextBoxBase 类也继承自 Control ) 这与引用类型无关,而是与继承有关。如果您需要使用属于 Control 类的方法,则将参数定义为 Control control 然后强制转换为 TextBox 是没有意义的。只需将参数定义为TextBox 或不强制转换。如果要向 TextBox 类添加约束,请将其添加到参数中。否则,不清楚为什么将 Button 作为参数传递什么都不做。 我认为这是正确的!我的方法更具扩展性,例如,如果进一步,想要为 RichTextBox 或 ComboBox 等进行重置。 如果你想让它更通用,如前所述和描述的,方法就是: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();
    

【讨论】:

以上是关于在单独的类中删除带有按钮的文本框的主要内容,如果未能解决你的问题,请参考以下文章

带有文本框和 JS 的提交按钮

在带有文本框的列表框中,如何关注添加的文本框?

如何在 wpf 中实现带有清除按钮的文本框?

Swift:在带有完成按钮的文本框中弹出 DatePicker

Javascript将数字添加到带有按钮的文本框[重复]

验证检查带有单个提交按钮的动态文本框