使用TChart绘制空输入框

时间:2014-12-22 23:21:33

标签: delphi

我让用户输入从常数(例如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是所有空的(如果是这样的话)框将被填入);有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

只需检查空字符串并替换为'0'

var
  Coeff: string;
....
Coeff := CoefficientEdit[i].CoEditBox.Text;
if Coeff = '' then
  Coeff := '0';

我假设CoEditBox是编辑控件。如果是,那么我会评论您不应该将修改控件传递给CheckCoefficientBoxesValidInputCreateGraph。这些函数应该接收字符串参数。您正在使它们不必要地耦合到特定的GUI设计。

也许这是你问题的根本原因。您评论说将编辑控件更改为包含零是令人困惑的。好吧,您现在不需要,现在应该更改编辑控件。将GUI与图表分开。不要传递编辑控件。从控件中拉出内容,可选择处理它,然后传递它。

最后,不要使用正则表达式检查值是否为数字,而是调用TryStrToFloat