当单击“无”按钮时,清除选项卡页面上的所有数据

本文关键字:数据 选项 清除 单击 按钮 | 更新日期: 2023-09-27 17:50:49

在我的应用程序我提交数据到数据库上的tabControls页面(页面:tabPage2),我想当点击提交按钮首先保存数据到数据库(我实现这一点)的问题会问什么会做吗?如果用户点击no按钮,tabpage2上的所有字段都将重置。所以我写了一个像下面这样的脚本,但它不清除字段。

        if (dr == DialogResult.Yes)
        {
            for (int i = 0; i < this.tabControl1.Controls.Count; i++)
            {
                if (this.tabControl1.SelectedTab == tabPage2)
                {
                    if (tabPage2.Controls[i] is TextBox)
                    {
                        tabPage2.Controls[i].Text = "";
                    }
                    if (tabPage2.Controls[i] is ComboBox)
                    {
                        tabPage2.Controls[i].Text = "";
                    }
                    if (tabPage2.Controls[i] is PictureBox)
                    {
                        tabPage2.Controls[i].Text = "";
                    }
                    if (tabPage2.Controls[i] is RadioButton)
                    {
                        tabPage2.Controls[i].Text = "";
                    }
                }

            }
        }

当单击“无”按钮时,清除选项卡页面上的所有数据

如果您在想要清除的特定选项卡页面中控制页面布局的类,那么最好在该类(例如Clear())中创建一个公共或内部方法,可以访问其每个成员控件并直接清除它们。这是最简单的方法,通常也应该适用。

如果您而不是需要它来处理具有未知结构的页面,您可能需要这样的方法:

private void ClearControls(Control parentControl)
{
    foreach (Control ctrl in parentControl.Controls)
    {
        TextBox ctrlText;
        ComboBox ctrlCombo;
        PictureBox ctrlPicture;
        RadioButton ctrlRadio;
        // Pay careful attention to the parentheses...
        if ((ctrlText = ctrl as TextBox) != null)
        {
            ctrlText.Text = string.Empty;
        }
        else if ((ctrlCombo = ctrl as ComboBox) != null)
        {
            ctrlCombo.SelectedIndex = -1;
        }
        else if ((ctrlPicture = ctrl as PictureBox) != null)
        {
            // Logic to clear a PictureBox called ctrlPicture
        }
        else if ((ctrlRadio = ctrl as RadioBox) != null)
        {
            // Logic to clear a RadioButton called ctrlRadio
        }
        else if (ctrl.Controls.Count > 0)
        {
            ClearControls(ctrl); // Recursively clear contained controls.
        }
    }
}

使用调用从原始处理程序启动它:

if (dr == DialogResult.Yes)
    ClearControls(this.tabControl1);

您正在遍历TabControl子控件的集合,而不是实际的TabPage子控件。

把你的代码改成:

if (dr == DialogResult.Yes && this.tabControl1.SelectedTab == tabPage2)
{
    foreach (var ctrl in tabPage2.Controls)
    {
        if (ctrl is TextBox || ctrl is ComboBox || ctrl is PictureBox || ctrl is RadioButton)
        {
            ctrl.Text = "";
        }
    }
}

我应该说,虽然设置Text属性为"对我来说,TextBox以外的控件感觉相当错误。你会发现,这对组合、图像和单选按钮不起作用。

同样,如果你有嵌套到面板或类似的控件,它们将不会被清除。容器有它们自己嵌套的控件集合,这些控件也可以是容器,依此类推。

IMHO 这将是更好的为您显式重置表单控件一个一个,而不是试图找到他们动态在您的表单。这样,您就可以在设计时自由地移动控件,而不必担心会破坏重置逻辑。

附加建议:您也可以在设计时将控件附加到您自己的IExtenderProvider组件的实例,该组件将根据控件的类型适当地重置控件。