无法将计时器转换为文本框数组 |温福



我正在尝试实现一个每 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强制转换为文本框,因为它不是文本框,而是计时器。

不过,您仍然可以在不使用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

最新更新