Choses à ne pas faire
Je vous propose de dresser une liste de choses à ne surtout pas faire dans vos applications

Bonjour,

Je vous propose de lancer dans ce fil, une liste de choses à ne surtout pas faire dans vos applications.

Je suis sur une maintenance applicative d'un code qui a débuté il y a 10 ans, il est complexe et contient des tas de choses à ne pas faire (CANPF).

La CANPF du jour :

Sur une fiche, vous placez un code d'initialisation sur, au choix, OnCreate, OnShow, OnActivate...

Plus tard, vous avez besoin de lancer ce code d'initialisation dans un contexte spécifique...exemple la fiche concerne un client et vous avez un bouton qui permet de passer sur un autre client, du coup il faut reinitialiser la fiche avec ce nouveau client. Et là vous faites appel à FormShow(nil) par exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
procedure TForm1.FormShow(Sender: TObject);
begin
  if Condition1 then
    ListBox1.ItemIndex := 12;
  if Condition2 then
    Label1.Visible := False;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  FormShow(nil);
end;
et puis finalement vous remarquez que vous ne devez pas faire exactement le même traitement, la condition2 doit être fausse...deux solutions aussi moches l'une que l'autre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
procedure TForm1.Button1Click(Sender: TObject);
var
  OldCondition2: Boolean;
begin
  OldCondition2 := Condition2;
  Condition2 := False;
  FormShow(nil);
  Condition2 := OldCondition2;
end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
procedure TForm1.FormShow(Sender: TObject);
begin
  if Condition1 then
    ListBox1.ItemIndex := 12;
  if Condition2 and (Sender <> nil) then
    Label1.Visible := False;
end;
à force de rustine de ce type vous finissez par avoir un code totalement illisible et incompréhensible.

donc ne faites JAMAIS ça ! la méthode FormShow doit être déclenchée par l'affichage de la fiche et point c'est tout !!!!

la bonne solution étant celle-ci par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
procedure TForm1.FormShow(Sender: TObject);
begin
  InitialiserListBox1;
  if Condition2 then
    Label1.Visible := False;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  InitialiserListBox1;
end;
 
procedure TForm1.InitialiserListBox1;
begin
  if Condition1 then
    ListBox1.ItemIndex := 12;
end;