Bonjour,

J'utilise une ComboBox, avec propriété "Style" = csDropDown, afin de pouvoir saisir dans "ComboBox.Text" la valeur des occurrences à supprimer de la liste de la ComboBox (par "Ctrl + Suppr").

Quand je demande à supprimer une occurrence qui n'existe pas dans la liste, j'affiche un message à l'aide de "Application.MessageBox", mais à mon grand désarroi la valeur disparait alors de "ComboBox.Text".
Même si je réaffecte la valeur à "ComboBox1.Text", la valeur ne réapparait toujours pas, et le résultat est le même si j'utilise "ShowMessage" à la place de "Application.MessageBox".
Quand je supprime l'affichage du message, la valeur saisie reste bien affichée dans "ComboBox.Text".
(La valeur saisie disparait automatiquement de "ComboBox.Text" quand on la supprime de la liste, mais cela ne me gêne pas.)

Je voudrais pouvoir afficher un message, tout en conservant la valeur saisie affichée dans "ComboBox.Text" si elle est absente de la liste, je recherche une solution pour cela.

Peut-être quelqu'un aurait-il une idée ?
Merci d'avance pour votre aide.

Ci joint les sources de mon petit programme de test :
Source "test.pas" :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
unit Test;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
const
  FONCTION_DELETE  =  46;
 
type
  TFrmTest = class(TForm)
    ComboBox: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormShow(Sender: TObject);
    procedure ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure EnvisagerSuppressionDeLaListe ();
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  FrmTest: TFrmTest;
 
implementation
 
{$R *.dfm}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.FormShow(Sender: TObject);
begin
  ComboBox.Clear;
  ComboBox.Items.Insert(ComboBox.Items.Count, 'a');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'c');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'e');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'g');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'i');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'k');
  ComboBox.Items.Insert(ComboBox.Items.Count, 'm');
  ComboBox.Text := '';
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if ((ComboBox.Text <> '')
  and (ssCtrl in Shift)) then
    begin  //Tester fonction suppres. ou insert.
      if (Key = FONCTION_DELETE) then
        begin  //Envisager suppression
          EnvisagerSuppressionDeLaListe ();
        end;
    end;
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.EnvisagerSuppressionDeLaListe ();
var
  i     : integer;
  sauve : string;
begin
  i   := 0;
  while ((i < ComboBox.Items.Count)
    and  (ComboBox.Text > ComboBox.Items.Strings [i])) do
    i := i + 1;  //occurs de la liste
  if ((i < ComboBox.Items.Count)
  and (ComboBox.Text = ComboBox.Items.Strings [i])) then
    begin
      ComboBox.Items.Delete (i);
    end
  else
    begin
      sauve         := ComboBox.Text;
      Application.MessageBox (pChar ('N''existe pas dans la liste'), '', MB_OK + MB_ICONSTOP);
    //ShowMessage (pChar ('N''existe pas dans la liste'));
    //ComboBox.SetFocus;
    //ComboBox.Text := sauve;
    end;
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
end.
Source "test.dfm" :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
object FrmTest: TFrmTest
  Left = 538
  Top = 117
  Width = 260
  Height = 279
  Caption = 'FrmTest'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 56
    Width = 113
    Height = 17
    AutoSize = False
    Caption = 'csDropDown'
  end
  object Label2: TLabel
    Left = 17
    Top = 78
    Width = 207
    Height = 17
    AutoSize = False
    Caption = 'Supprimer de la liste : Ctrl + Suppr.'
  end
  object ComboBox: TComboBox
    Left = 16
    Top = 24
    Width = 209
    Height = 21
    ItemHeight = 13
    TabOrder = 0
    Text = 'ComboBox'
    OnKeyDown = ComboBoxKeyDown
  end
end
Source "TestComboBox.dpr" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
program TestComboBox;
 
uses
  Forms,
  Test in 'Test.pas' {FrmTest};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TFrmTest, FrmTest);
  Application.Run;
end.