【问题标题】:Delphi, adding digetsDelphi,添加数字
【发布时间】:2014-02-12 07:52:51
【问题描述】:

我的教科书上说我需要用三个按钮制作一个捐赠程序,每个按钮代表一定数量的钱。按下按钮后,标签上应显示“捐赠金额”。

例如,如果我按下$10 按钮,它将显示The total amount raised so far is $10。然后,如果我按下$50 按钮,标签应该标题为The total amount raised so far is $60。我需要 3 个按钮,一个 $10, $20$50

我什至不知道从编码方面开始!

这是起始代码:

unit AIDSAWARENESS_U;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    btn10: TButton;
    btn50: TButton;
    btn20: TButton;
    lblOutput: TLabel;
  private
   {private declarations}
  public
   {public declarations}
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


end.

如果您不介意帮助我,将不胜感激!

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

    您的应用程序必须

    • 包含 3 个具有不同值的按钮(让它们命名为 Value10_ButtonValue20_ButtonValue30_Button

    • 包含一个带有当前金额的标签(让它命名为Amount_Label

    • RaiseAmount 如果按下某个值按钮

    • UpdateAmount_Label如果金额值发生变化

    接下来我们就直接进入

    type
      TForm1 = class( TForm )
        Value10_Button : TButton;
        Value20_Button : TButton;
        Value50_Button : TButton;
        Amount_Label : TLabel;
        procedure Value10_ButtonClick( Sender : TObject );
        procedure Value20_ButtonClick( Sender : TObject );
        procedure Value50_ButtonClick( Sender : TObject );
      private
        FAmount : Currency;
        procedure SetAmount( const Value : Currency );
        procedure UpdateAmount_Label;
        procedure RaiseAmount( const Value : Currency );
      public
        property Amount : Currency read FAmount write SetAmount;
      end;
    
    procedure TForm1.RaiseAmount( const Value : Currency );
    begin
      Amount := Amount + Value;
    end;
    
    procedure TForm1.SetAmount( const Value : Currency );
    begin
      if FAmount <> Value then
      begin
        FAmount := Value;
        UpdateAmount_Label;
      end;
    end;
    
    procedure TForm1.UpdateAmount_Label;
    begin
      Amount_Label.Caption := Format( 'The total amount raised so far is $%f', [Amount] );
    end;
    
    procedure TForm1.Value10_ButtonClick( Sender : TObject );
    begin
      RaiseAmount( 10 );
    end;
    
    procedure TForm1.Value20_ButtonClick( Sender : TObject );
    begin
      RaiseAmount( 20 );
    end;
    
    procedure TForm1.Value50_ButtonClick( Sender : TObject );
    begin
      RaiseAmount( 50 );
    end;
    

    根据 Remy 的建议,您可以使用按钮的 Tagproperty,但我更喜欢以不同的方式使用它们

    procedure TForm1.Value_ButtonClick( Sender : TObject );
    begin
      case ( Sender as TComponent ).Tag of
        1 : RaiseAmount( 10 );
        2 : RaiseAmount( 20 );
        3 : RaiseAmount( 30 );
      end;
    end;
    

    在一个真实的应用程序中,我会有一个查找表来从标签属性中获取值,以摆脱那个 ma​​gic numbers

    procedure TForm1.Value_ButtonClick( Sender : TObject );
    begin
      RaiseAmount( GetAmountFromIndex( ( Sender as TComponent ).Tag ) );
    end;
    

    【讨论】:

    • 我会为所有三个按钮使用一个 OnClick 处理程序,并使用按钮的 Tag 属性来保存要传递给 RaiseAmount()..的金额。
    • @SirRufo:不是这样。看我的回答。
    【解决方案2】:

    你需要

    • 添加一种计算总值的方法(提示字段)。
    • 为按钮添加事件处理程序,它们需要更新值并显示总数。

    如果您不知道该怎么做,请查看您的教科书。

    【讨论】:

    • 我的教科书没有这样解释。
    • @link:你一直说你的教科书没有解释任何东西。你真的需要找一本更好的教科书。或者忘记教科书,自己做实验,研究别人的代码。我就是这样自学的。
    • 这是一本仅限南非使用的教科书(10 年前),因为南非是地球上最后一个在课堂上使用 Delphi 的地方之一。我相信这是为了他们的委托而拼凑起来的。最好下载 Marco Cantu 的免费 Pascal 指南:marcocantu.com/epascal 查找他的一些其他 Delphi 书籍的二手副本可能也很有用。
    • @alcalde 感谢您的回答。顺便说一句,为什么我的问题被否决了这么多次?我知道我在编码方面很烂,我真的没有编码的大脑,但是反对票确实让你感觉很糟糕:(
    • @link,它被否决了,因为它缺乏你自己解决问题的任何努力。它看起来像一个“解决我的家庭作业问题”。一个好的问题表明提问者的努力。 (这正是我用指针回答没有真正答案的原因。最后,你从尝试中学到的东西比从复制中学到的更多。
    【解决方案3】:

    试试这个:

    unit AIDSAWARENESS_U;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        btn10: TButton;
        btn50: TButton;
        btn20: TButton;
        lblOutput: TLabel;
        procedure btnClick(Sender: TObject);
      private
        {private declarations}
        Amount: Integer;
      public
        {public declarations}
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.btnClick(Sender: TObject);
    begin
      Inc(Amount, TButton(Sender).Tag);
      lblOutput.Caption := Format('The total amount raised so far is $%d', [Amount]);
    end;
    
    end.
    

    那么您所要做的就是将btnClick() 指定为所有三个按钮的OnClick 事件处理程序,并将每个按钮的Tag 属性设置为所需的数量。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2018-02-04
      相关资源
      最近更新 更多