无法将计时器投射到文本框数组 |窗体

Can Not Cast Timer to Array of Textboxes | Winform

我正在尝试实现一个每 10 毫秒运行一次的计时器,以确定用户是否填写了某个字段。本质上,如果填充了一个文本框(最多 10 个),则会启用一个按钮。如果他们填写,然后删除输入,计时器将确定并禁用按钮。可以在下面看到:

private: System::Void StartBtn_Tick(System::Object^  sender, System::EventArgs^  e) {
int count = 0;

array < TextBox ^ > ^ textbox = { vPeak1, vPeak2, vPeak3, vPeak4, vPeak5, vPeak6, vPeak7, vPeak8, vPeak9, vPeak10 };
TextBox ^ current = (TextBox ^)sender;

for (int i = 0; i < 10; i++) {
    if (textbox[i]->Text != L"") count++;
    else count--;
}

此代码适用于单个文本框,但是一旦我实现了文本框数组,程序立即崩溃并在第 4 行出现异常。'count' 的值为 0。

"'无法将类型 'System.Windows.Forms.Timer' 的对象转换为类型 'System.Windows.Forms.TextBox'。'""

根据您发布的代码,

private: System::Void StartBtn_Tick(System::Object^  sender, System::EventArgs^  e)

这似乎是计时器的 Tick 处理程序。 sender 是生成导致调用处理程序的事件的对象,因此在这种情况下 sender 将是计时器本身而不是文本框。您不能将 sender 转换为 TextBox,因为它不是 TextBox,而是一个 Timer。

尽管如此,您仍然可以在不使用 sender 的情况下完成同样的事情,因为您根本不会使用它。

array < TextBox ^ > ^ textbox = { vPeak1, vPeak2, vPeak3, vPeak4, vPeak5, vPeak6, vPeak7, vPeak8, vPeak9, vPeak10 };
int count = 0;

for (int i = 0; i < 10; i++) {
    if (textbox[i]->Text != L"") count++;
}
// Test the final value of count here and do whatever you need