i am working on an software in which i want to clear each thing after doing achieving a specific task, like clearing all the fields, list view etc etc and i've to write the a lot of things to be cleared off, like the code of my new button is:
 private void btnNew_Click(object sender, EventArgs e)
    {
        txtProductCode1.ReadOnly = false;
        txtInvoiceNo.ReadOnly = false;
        cmbCustoemerType.Enabled = false;
        cmbCustomerName.Enabled = false;
        button1.Enabled = true;
        txtProductCode1.Text = null;
        txtWageName.Text = null;
        txtWageCost.Text = null;
        btnFirst.Visible = false;
        btnPrevious.Visible = false;
        btnNext.Visible = false;
        btnLast.Visible = false;
        cmbProductName.Enabled = true;
        txtQty.ReadOnly = false;
        txtPercant.ReadOnly = false;
        txtDiscount.ReadOnly = false;
        cmbCustoemerType.Enabled = true;
        cmbCustomerName.Enabled = true;
        button5.Enabled = true;
        btnDelete.Enabled = true;
        dtp1.Enabled = true;
        btnSave.Text = "&Save";
        cmbCustoemerType.Text = null;
        cmbCustomerName.Text = null;
        txtInvoiceNo.Clear();
        txtDiscount.Clear();
        txtGrandTotal.Clear();
        txtProductName.Clear();
        txtSalePrice.Clear();
        txtQty.Clear();
        txtTotal.Clear();
        txtExtraWages.Text = null;
        lvExtraWages.Items.Clear();
        lvTransaction.Items.Clear();
        lblCount.Text = null;
        lblNetTotal.Text = null;
        txtPercant.Text = null;
        txtInvoiceNo.Text = invoice.ToString();
    }
is there any way to get rid of writing the code again n again, like i need to enable one thing which i've disabled here on another button so i have to write reverse code of this to achieve the task and it's really annoying! is there any other way to do this?
tried following code:
private void btnNew_Click(object sender, EventArgs e)
        {   
           //using setboxdefault function
            SetTextBoxDefaults();
            cmbCustoemerType.Text = null;
            cmbCustomerName.Text = null;
        cmbCustoemerType.Enabled = false;
        cmbCustomerName.Enabled = false;
        cmbProductName.Enabled = true;
        cmbCustoemerType.Enabled = true;
        cmbCustomerName.Enabled = true;
        button5.Enabled = true;
        btnDelete.Enabled = true;  
        button1.Enabled = true;          
        btnFirst.Visible = false;
        btnPrevious.Visible = false;
        btnNext.Visible = false;
        btnLast.Visible = false;          
        btnSave.Text = "&Save";
        lvExtraWages.Items.Clear();
        lvTransaction.Items.Clear();
        lblCount.Text = null;
        lblNetTotal.Text = null;
        dtp1.Enabled = true;
        txtInvoiceNo.Text = invoice.ToString();
    }
    private void SetTextBoxDefaults()
    {
        var textBoxes = GetControls(this, typeof(TextBox));
        foreach (var textBox in textBoxes)
        {
            TextBox.Clear();
        }
    }
    public IEnumerable<Control> GetControls(Control control, Type type)
    {
        var controls = control.Controls.Cast<Control>();
        return controls.SelectMany(ctrl => GetControls(ctrl, type)).Concat(controls).Where(c => c.GetType() == type);
    }
but it's giving error on  TextBox.Clear(); , error is Error   4   
An object reference is required for the non-static field, method, or property 'System.Windows.Forms.TextBoxBase.Clear()'    
Please let me know where i am mistaking..!!
As Tim has suggested, you can iterate though the controls and set each one accordingly..
public IEnumerable<Control> GetControls(Control control,Type type)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrl => GetControls(ctrl,type)).Concat(controls).Where(c => c.GetType() == type);
}
private void btnNew_Click(object sender, EventArgs e)
{
    SetComboBoxDefaults();
    SetTextBoxDefaults();
    SetButtonDefaults();
}
private void SetComboBoxDefaults()
{
    var comboBoxes = GetControls(this, typeof(ComboBox));
    foreach (var comboBox in comboBoxes)
    {
        ((ComboBox)comboBox).Enabled = false;
        ((ComboBox)comboBox).Text = null;
    }
}
private void SetTextBoxDefaults()
{
    var textBoxes = GetControls(this, typeof(TextBox));
    foreach (var textBox in textBoxes)
    {
        ((TextBox)textBox).Clear();
    }
}
private void SetButtonDefaults()
{
    var buttons = GetControls(this, typeof(Button));
    foreach (var button in buttons)
    {
        ((Button)button).Visible = false;
        if (button.Name == "btnSave") ((Button)button).Text = "&Save";
    }
}
You can also have separate GetControl methods so that it returns a specific type of Control, reducing the need to cast to derived types.
update for edit:
You are using the TextBox type instead of the variable name in the foreach loop. Update it to use textBox (lowercase), not TextBox (pascal) see below:
private void SetTextBoxDefaults()
{
    var textBoxes = GetControls(this, typeof(TextBox));
    foreach (var textBox in textBoxes)
    {
        ((TextBox)textBox).Clear();
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With