Q&A

  • 이궁 왜케 모르는게 많은 건지.. 좀 읽어 주세요
저기 자꾸 질문만 해서 죄송한데요.

제가 지금 짜는 프로그램엔 약 백개의 버튼이 있습니다.

그런데 버튼이 클릭될때마다 다 같은 일을 수행해요.

그래서 다 동일한 프로시져로 연결시켰는데, 여기서 그 프로시져가

어떤 버튼이 클릭되었는지 알아야 합니다. 정확히 버튼이 아니고

에디트 박슨데, 에디트 박스에 있는 텍스트 값이 이벤트에서

사용되거든요.

예전에 버튼이 몇개 안되는 경우 sender.tag 해서 태그 값으 일일히 주고

그 값을 비교해서 코딩했는데, 이번엔 100개 가량 되서 이런식의 코딩이

너무 비효율적인것 같아서요.

좋은 방법 없나요..?
2  COMMENTS
  • Profile
    김경록 2002.05.14 08:52
    이런 문제는 비효율적일 수 밖에 없습니다..
    같은 이벤트 혹은 프로시져를 사용하는데..
    어떤 Edit Box에서 호출한것인지 알려면..

    호출한 Edit박스의 이름을 알던가..
    아님.. 다른 방법을 알아야 한다는 뜻입니다..
    즉, 특정 Edit박스를 찾는 조건문이 무조건 1개 생긴다는 뜻입니다..
    이런걸 특정 Edit 박스의 이름으로 비교한다면..
    예를 들어..
       If (Sender as TEdit).Name = 'ed_Custno' Then
       Else If
       .
       .

    이런식으로 100개를 만들어야 한다는 뜻입니다..
    이런건 정말 비효율적입니다...
    님께서 말씀하긴 내용은 무조건 해당Edit박스가 어떤건지..
    찾는 조건이 무조건 1개가 나타날 수 밖에 없기 때문에..
    If 문으로 찾는건.. 거의 노가다 수준이구여..

    님께서.. 올렸던 글에 Tag에 값을 주는 방법이 있습니다..
    차라리 그 방법이 약간은 비효율적이진 않을 것 같습니다..
    님이 올린 내용에 의하면여..

    Case Tag Of
          0:
          1:
          .
          .
          .
    end;

    차라리 이게 더 낫다고 생각합니다..
    Case에서 1번의 조회로 끝이 날테니까여..
    물론, 이 방법도 당연히 노가다라는 건 님도 아시겠지만..


  • Profile
    배창섭 2002.05.13 22:39
    여러개의 버튼이 같은 이벤트 핸들러를 사용할 때 어떤 버튼이 눌러졌는 지 아는 방법은 이렇습니다. 저는 폼 위에 10개의 버튼을 올려 놓고 Edit박스를 하나 두고 특정 버튼이 눌러지면 그 버튼의 이름을 Edit박스에 표시해주는 프로그램을 간단히 만들어 보았습니다. 원하시는 것이 Edit박스라면 TButton 대신 TEdit로 바꾸시면 되구요.  

    unit Unit1;

    interface

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

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        Button9: TButton;
        Button10: TButton;
        Edit1: TEdit;
        procedure ButtonClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.ButtonClick(Sender: TObject);
    begin
      If Sender is TButton then
      begin
        Edit1.Text := TButton(Sender).Name;
      end;
    end;

    end.