C# Windows 窗体 : Looping through Dynamically created TextBoxes and checking to see if Text has changed

标签 c# windows controls windows-forms-designer panels

我正在尝试创建某种图形化 SQL 编辑器 - 但我不喜欢表格的视觉效果,并且正在尝试添加更多交互性(拖放等)。

我已经检查并根据每条记录创建了面板,并根据我表格中的每条记录向每个面板添加了文本框。我现在坚持的是循环动态创建的控件并检查它们的状态或与它们交互的概念。

如果您发现我的结构有问题,请告诉我。

我的代码如下:

生成面板的代码:

  private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
    {
        groupBox1.Controls.Clear();
        string pDBString = null;
        SqlConnection cnn;
        pDBString = "Data Source=localhost\\" + Form1.host + ";Initial Catalog=" + Form1.db + ";Integrated Security=SSPI;";
        cnn = new SqlConnection(pDBString);
        string sqlForProps = "select * from PROPS where user_id_txt ='" + comboBox1.SelectedItem.ToString() + "'";
        try
        {
            using (cnn)
            {
                cnn.Open();
                SqlCommand cmd = new SqlCommand(sqlForProps, cnn);
                SqlDataReader sqlReader = cmd.ExecuteReader();

                int x = 0;
                int count = 0;
                while (sqlReader.Read())
                {
                    Panel panel = new System.Windows.Forms.Panel();
                    panel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                    x += 30;
                    panel.Location = new System.Drawing.Point(3, x);
                    panel.Name = "panel" + count;
                    panel.Size = new System.Drawing.Size(519, 30);
                    panel.TabIndex = 3;
                    PropsPanels.Add(panel);
                    groupBox1.Controls.Add(panel);

                    TextBox textbox = new System.Windows.Forms.TextBox();
                    panel.Controls.Add(textbox);
                    textbox.Location = new System.Drawing.Point(1, 3);
                    textbox.Name = "textBox" + count;
                    textbox.Size = new System.Drawing.Size(100, 20);
                    textbox.TabIndex = 4;
                    textbox.Text = sqlReader["USER_ID_TXT"].ToString();

                    TextBox textboxAM = new System.Windows.Forms.TextBox();
                        panel.Controls.Add(textboxAM);
                        textboxAM.Location = new System.Drawing.Point(126, 3);
                        textboxAM.Name = "textBoxAM" + count;
                        textboxAM.Size = new System.Drawing.Size(100, 20);
                        textboxAM.TabIndex = 4;
                        textboxAM.Text = sqlReader["PROP_TXT"].ToString();

                    TextBox textboxAMSet = new System.Windows.Forms.TextBox();
                        panel.Controls.Add(textboxAMSet);
                        textboxAMSet.Location = new System.Drawing.Point(232, 3);
                        textboxAMSet.Name = "textBoxAM" + count;
                        textboxAMSet.Size = new System.Drawing.Size(100, 20);
                        textboxAMSet.TabIndex = 4;
                        textboxAMSet.Text = sqlReader["VAL_TXT"].ToString();
                    count++;
                }
                sqlReader.Close();
                cnn.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Can not open connection !");
        }

    }

假设检查面板的代码:

        public AMMain()
    {

        InitializeComponent();
        string pDBString = null;
        SqlConnection cnn;
        pDBString = "Data Source=US7-AHACKETT\\SQLEXPRESS;Initial Catalog=OrchestroConfigurationDB;Integrated Security=SSPI;";
        MessageBox.Show(pDBString);
        cnn = new SqlConnection(pDBString);
        try
        {
            using (cnn)
            {
                SqlCommand sqlForUserList = new SqlCommand("select UserName from users a join Company b on a.CompanyID = b.CompanyID where CompanyCode='" + Form1.company + "'", cnn);
                cnn.Open();
                MessageBox.Show("Connection Open !");
                SqlDataReader sqlReader = sqlForUserList.ExecuteReader();
                while (sqlReader.Read())
                {
                    comboBox1.Items.Add(sqlReader["UserName"].ToString());
                }
                sqlReader.Close();
                cnn.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Can not open connection !");
        }

        foreach (Panel p in PropsPanels)
        {
            foreach (Control c in p.Controls)
            {
                if(c is TextBox)
                {
                    object sender = new object();
                    EventArgs e = new EventArgs();
                    if(c.TextChanged()??????)
                    {
                     //DOSOMETHING   
                    }
                }
            }
        }
    }

例如:如果我想检查我放置在表单上的文本框的文本是否更改,我会这样做:

        private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

所以我想我无法思考如何在运行时检查它,因为我是在运行时创建文本框。

感谢您的帮助!

最佳答案

For example: if I wanted to check if text changed for a textbox that I put on the form I would do so:

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

So I guess I can't wrap my head around how I would check this at run-time since I am creating the Textboxes at runtime.

你也一样!

首先创建一个处理事件的方法:

private void TextBoxTextChanged(object sender, EventArgs e) {
    // you can use the sender argument to check exactly which text box's text changed
}

当你初始化你的表单时,你这样做:

textbox.TextChanged += TextBoxTextChanged;
textboxAM.TextChanged += TextBoxTextChanged;
textboxAMSet.TextChanged += TextBoxTextChanged;

关于C# Windows 窗体 : Looping through Dynamically created TextBoxes and checking to see if Text has changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984929/

相关文章:

c# - 多态与职责划分 : how to avoid 'switching on type'

windows - 使用 breakpad 创建 CLR 转储

javascript - 以编程方式折叠 Leaflet JS 层控件

c# - 覆盖 ComboBox 的 DrawItem

c# - .NET - 如何隐藏 DateTimePicker 中的无效选择

c# - 使用 TextBox 或 RichTextBox 显示图像文件中的原始数据?

c# - 在返回 IEnumerable 的方法中使用锁时,linq 延迟执行

c# - 在 monoTouch 中用 "\n"分隔字符串

c++ - I/O 完成端口的异步操作返回 0 字节传输

windows - Windows 目录中的 "."和 ".."是什么?