我正在尝试实现一个每 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