我在表单中有一个按钮。每次单击按钮时都会加载一个组框(您可以参考我之前的问题)。每个组框中的文本框和标签很少。我已经为组框中的文本框引发了按键事件。 keyDown 事件会进行一些数学计算。
链接到我之前的问题: 使用 button_click 事件在表单中加载多个 Groupboxes
只加载一个groupbox时可以正常工作。但是当加载第二个组框时,引发的事件对先前加载的组框中的文本框不起作用。它只适用于新的组框。 例如, 如果在加载 groupbox1 后单击该按钮,如果在加载 groupbox2 时单击该按钮,依此类推... 问题是 keydown 事件只适用于新加载的组框。 (即,如果第三次单击按钮,则 keydown 事件仅适用于 groupbox3。对于 groupbox1 和 groupbox2,它不起作用) 当加载新的组框时,应该如何保留先前组框中控件的事件。
这就是我的尝试:我只是在使用“+=”运算符时为每个文本框引发了 keydown 事件。但问题依然存在。
private GroupBox GetGroupBox(int a, int b, int c)
{
System.Windows.Forms.GroupBox gBox = new System.Windows.Forms.GroupBox();
Form1 myObj = new Form1();
gBox.Text = "S" + (a.ToString());
gBox.Name = "S" + (a.ToString());
gBox.Width = 150;
gBox.Height = 150;
gBox.Location = new Point(15 + (count - 1) * (gBox.Width + 10), 400);
// Labels
Label lb1 = new Label();
lb1.Text = "Length";
lb1.Width = 60;
lb1.Height = 20;
Label lb2 = new Label();
lb2.Text = "Angle";
lb2.Width = 50;
lb2.Height = 20;
// Textboxes
tbx1 = new TextBox();
tbx1.Name = "tbx" + b.ToString();
tbx1.Width = 40;
tbx1.Height = 10;
tbx1.Text = "50";
tbx1.KeyDown += Tbx1_KeyDown;
tbx2 = new TextBox();
tbx2.Name = "tbx" + c.ToString();
tbx2.Width = 40;
tbx2.Height = 10;
tbx2.Text = "45";
tbx2.KeyDown += Tbx2_KeyDown;
gBox.Controls.Add(lb1);
lb1.Location = new Point(10, 30);
gBox.Controls.Add(lb2);
lb2.Location = new Point(10, 70);
gBox.Controls.Add(tbx1);
tbx1.Location = new Point(100, 30);
gBox.Controls.Add(tbx2);
tbx2.Location = new Point(100, 70);
return gBox;
}
在上面的尝试之后,我想如果我可以创建一个包含所有文本框的数组,那么我可以使用 foreach 循环同时为所有文本框引发一个 keydown 事件。但这也不起作用。请检查以下代码:
TextBox[] tbxs = {tbx1, tbx2 };
foreach (TextBox tbx1 in tbxs)
{
tbx1.KeyDown += Tbx1_KeyDown1;
tbx2.KeyDown += Tbx2_KeyDown1;
}
提前谢谢你。
根据您的描述和代码,缺少很多东西:
您的问题似乎是您正在创建一个新组,并且可能稍后将其添加到表单中。如果是这种情况,您可以在 GetGroupbox 方法中调用 +=。 另一种方法是在 GetGroupBox 期间将所有 TextBox 实例添加到列表中,然后再执行 +=.
现在,你的 foreach 很糟糕。你在 tbx1 上迭代,在那种情况下 tbx2 是什么?
我建议你学习调试(通过断点)和评估你的代码行为。这将加强你的编码。