相关疑难解决方法(0)

Delphi"with"关键字是一种不好的做法吗?

我一直在阅读关于delphi中with关键字的坏事,但在我看来,如果你不过度使用它.它可以使您的代码看起来很简单.

我经常将所有TClientDataSets和TField都放在TDataModules中.所以在我的表单中我有这样的代码

procedure TMyForm.AddButtonClick(Sender: TObject);
begin  
  with LongNameDataModule do
  begin
     LongNameTable1.Insert;
     LongNameTable1_Field1.Value := "some value";
     LongNameTable1_Field2.Value := LongNameTable2_LongNameField1.Value;
     LongNameTable1_Field3.Value := LongNameTable3_LongNameField1.Value;
     LongNameTable1_Field4.Value := LongNameTable4_LongNameField1.Value;
     LongNameTable1.Post;
  end
end;
Run Code Online (Sandbox Code Playgroud)

如果没有with关键字,我必须编写这样的代码

    procedure TMyForm.AddButtonClick(Sender: TObject);
    begin            
      LongNameDataModule.LongNameTable1.Insert;
      LongNameDataModule.LongNameTable1_LongNameField1.Value := "some value";

      LongNameDataModule.LongNameTable1_LongNameField2.Value :=
               LongNameDataModule.LongNameTable2_LongNameField1.Value;

      LongNameDataModule.LongNameTable1_LongNameField3.Value :=
               LongNameDataModule.LongNameTable3_LongNameField1.Value;

      LongNameDataModule.LongNameTable1_LongNameField4.Value :=
               LongNameDataModule.LongNameTable4_LongNameField1.Value;

      LongNameDataModule.LongNameTable1.Post;
    end;
Run Code Online (Sandbox Code Playgroud)

我认为使用with关键字更容易阅读.

我应该避免使用with关键字吗?

delphi with-statement

34
推荐指数
9
解决办法
1万
查看次数

为什么我不能在Delphi中使用"with"?

我听过很多程序员,特别是Delphi程序员嘲笑使用'with'.

我认为它使程序运行得更快(只有一个对父对象的引用),并且如果使用得当,它更容易阅读代码(少于十几行代码并且没有嵌套).

这是一个例子:

procedure TBitmap32.FillRectS(const ARect: TRect; Value: TColor32);
begin
  with ARect do FillRectS(Left, Top, Right, Bottom, Value);
end;
Run Code Online (Sandbox Code Playgroud)

我喜欢用with.我怎么了?

delphi with-statement

20
推荐指数
6
解决办法
7538
查看次数

在Delphi 2006中使用'WITH'语句调试问题

可能重复:
Delphi的"with"有什么问题

我在调试BDS 2006中使用'WITH'语句的代码时遇到问题调试器不会在类或记录中显示变量的值.我做错了什么或者BDS 2006有错误吗?

type
  TNumber = class
      Num: Integer;
  end;

implementation

{$R *.dfm}

var
   MyNumber: TNumber;

procedure TForm2.FormCreate(Sender: TObject);
begin
   MyNumber := TNumber.Create;
   MyNumber.Num := 10;   /// MyNumber.Num Can be seen with debugger
   with  MyNumber do
   begin
     Num := Num +1 ;           /// Num is not seen by the  debugger
     MyNumber.Num := Num +1 ;  /// MyNumber.Num is seen but Num is not seen by the  debugger
   end;
end;
Run Code Online (Sandbox Code Playgroud)

编辑:

当然可以使用变量的全名但是如果你有一个具有多个级别的复杂结构,事情会变得非常混乱

delphi

6
推荐指数
5
解决办法
1287
查看次数

如何获取对WITH语句中创建的TQuery对象的引用?

可能重复:
在Delphi中使用"with"创建的引用对象实例

我在Delphi中用于创建查询对象的一种方法遵循第一个代码示例.它给了我对象的引用,然后我可以将对象传递给一个函数.

procedure SomeProcedure;
var
  qry: TQuery;
begin
  qry := TQuery.Create(nil);

  with qry do
  begin
    Connection := MyConn;
    SQL.Text := 'SELECT * FROM PEOPLE';
    Open;

    funcDisplayDataSet(qry);
    Free;
  end;

end;
Run Code Online (Sandbox Code Playgroud)

是否也可以在WITH语句中执行此操作,其中您的Create对象包含在WITH语句中?

procedure SomeProcedure;
begin
  with TQuery.Create(nil) do
  begin
    Connection := MyConn;
    SQL.Text := 'SELECT * FROM PEOPLE';
    Open;

    funcDisplayDataSet( ??? );  // Here I'm unsure how to pass the object created...
    Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我可以将这个动态对象传递给像`funcDisplayDataSet(TQuery)这样的函数吗?

我只是想知道这是否可行.我不是在寻找关于为什么WITH语句不好或好的总结.StackOver流程中有其他帖子与讨论.*

delphi

5
推荐指数
2
解决办法
1853
查看次数

在不使用变量的情况下在“with”语句中创建对象

var 
  UserName, NickName, UserID: string;
begin
  with TStringList.Create do
  begin
    CommaText := 'ali,veli,4950';
    UserName := x[0];  //what is x ? (x is Tstringlist.create)
    NickName := x[1];
    UserID := x[2];
  end;   
end;
Run Code Online (Sandbox Code Playgroud)

如果我使用下面的代码,它就可以工作。但我不想声明一个变量。我可以将它与任何变量一起使用吗?

with声明中,我如何使用它?

var 
  tsl: TStringList;
begin
  tsl := TStringlist.Create;
  with tsl do
  begin
    CommaText := 'ali,veli,4950';
    UserName := tsl[0]; 
    NickName := tsl[1];
    UserID := tsl[2];
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi variables with-statement declare

1
推荐指数
1
解决办法
109
查看次数

标签 统计

delphi ×5

with-statement ×3

declare ×1

variables ×1