我让用户输入从常数(例如2)一直到sextic(例如3X ^ 6)的项的系数(作为字符串)。
用户输入每个系数而不附加X-term,因此输入3X ^ 6为3。
单击一个okay按钮后,想法是将有效的系数(使用RegEx表达式检查)传送到一个程序(' CreateGraph'),该程序实际使用TChart创建图形。
单击okay按钮后,使用i = 1到7(系数数)的循环来检查每个术语是否有效。我遇到的问题是,在转换CreateGraph过程中的系数时,我得到一个字符串转换错误,因为除了那些有数据的系数之外的其他系数被设置为''',TChart赢了接受。
这是目前的程序:
procedure TfrmGetFunction.btnAddFunctionClick(Sender: TObject);
var
i : integer; // Loop counter.
begin
for i := 1 to 7 do
begin
if CheckCoefficientBoxesValidInput(CoefficientEdit[i].CoEditBox) then
frmGraphingMode.CreateGraph(CoefficientEdit[i].CoEditBox);
end;
end;
是将非活动系数编辑框设置为' 0'的最佳方法
我遇到的(潜在)问题是当用户想要输入另一组系数或回到“输入功能”时。表格,这些值都设置为0,可能会造成混淆。
我遇到的下一个问题(与第一个问题相关)是每次i递增时调用CreateGraph过程,这意味着传递了一个空输入框的加载,这是TChart不喜欢的
这是我目前的程序:
var
i : integer; // Loop counter.
Coeff : array[1..7] of string;
begin
for i := 1 to 7 do
begin
Coeff[i] := CoefficientEdit[i].CoEditBox.Text;
if Coeff[i] = '' then
Coeff[i] := '0';
frmGraphingMode.CreateGraph(Coeff[i]);
end;
end;
解决此问题的最简单方法是什么?我想有一个布尔变量,当循环完成时设置为true(即i = 7是所有空的(如果是这样的话)框将被填入);有更好的方法吗?
答案 0 :(得分:2)
只需检查空字符串并替换为'0'
。
var
Coeff: string;
....
Coeff := CoefficientEdit[i].CoEditBox.Text;
if Coeff = '' then
Coeff := '0';
我假设CoEditBox
是编辑控件。如果是,那么我会评论您不应该将修改控件传递给CheckCoefficientBoxesValidInput
和CreateGraph
。这些函数应该接收字符串参数。您正在使它们不必要地耦合到特定的GUI设计。
也许这是你问题的根本原因。您评论说将编辑控件更改为包含零是令人困惑的。好吧,您现在不需要,现在应该更改编辑控件。将GUI与图表分开。不要传递编辑控件。从控件中拉出内容,可选择处理它,然后传递它。
最后,不要使用正则表达式检查值是否为数字,而是调用TryStrToFloat
。