Einzelnen Beitrag anzeigen

gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Verständnisfrage zu DialogResult

  Alt 1. Okt 2006, 18:27
Hallo, Allerseits.

Ich bin mit meinem Problem nicht wirklich weitergekommen. Hier mal der Quelltext meiner Komponente:

Delphi-Quellcode:
unit StringEdit;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data;

type
  StrEdit = class(System.Windows.Forms.TextBox)
  {$REGION 'Vom Designer verwalteter Code'}
  strict private
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    Components : System.ComponentModel.Container;
    StrEditDialog : System.Windows.Forms.Form;
    StrEditDialogTextBox : System.Windows.Forms.TextBox;
    StrEditDialogOK : System.Windows.Forms.Button;
    StrEditDialogCancel : System.Windows.Forms.Button;
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers -
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure InitializeComponent;
    procedure StrEdit_Enter(sender: System.Object; e: System.EventArgs);
    procedure StrEdit_Leave(sender: System.Object; e: System.EventArgs);
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Ressourcen nach der Verwendung bereinigen
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private-Deklarationen }
  public
    constructor Create;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(StrEdit))]

implementation

uses
  System.Globalization;

{$AUTOBOX ON}

{$REGION 'Vom Windows Form-Designer erzeugter Code'}
/// <summary>
/// Erforderliche Methode zur Unterstützung des Designers --
/// ändern Sie die Methode nicht mit dem Quelltext-Editor
/// </summary>
procedure StrEdit.InitializeComponent;
begin
  //
  // StrEdit
  //
  Include(Self.Leave, Self.StrEdit_Leave);
  Include(Self.Enter, Self.StrEdit_Enter);
end;
{$ENDREGION}

constructor StrEdit.Create;
begin
  inherited Create;
  //
  // Erforderlich für die Unterstützung des Windows Forms-Designers
  //
  InitializeComponent;
  //
  // TODO: Fügen Sie nach dem Aufruf von InitializeComponent Konstruktorcode hinzu.
  //
  StrEditDialog := System.Windows.Forms.Form.Create;
  StrEditDialog.Size := System.Drawing.Size.Create(400,130);
  StrEditDialog.Text := 'Komfort-Eingabe';
  StrEditDialog.ControlBox := false;

  StrEditDialogOK := System.Windows.Forms.Button.Create;
  StrEditDialogOK.Size := System.Drawing.Size.Create(100,30);
  StrEditDialogOK.Location := System.Drawing.Point.Create(StrEditDialog.Width-250, StrEditDialog.Height-70);
  StrEditDialogOK.Text := '&OK';
  StrEditDialogOK.DialogResult := System.Windows.Forms.DialogResult.OK;
  StrEditDialog.Controls.Add(StrEditDialogOK);

  StrEditDialogCancel := System.Windows.Forms.Button.Create;
  StrEditDialogCancel.Size := System.Drawing.Size.Create(100,30);
  StrEditDialogCancel.Location := System.Drawing.Point.Create(StrEditDialog.Width-250+110, StrEditDialog.Height-70);
  StrEditDialogCancel.Text := '&Abbruch';
  StrEditDialogCancel.DialogResult := System.Windows.Forms.DialogResult.Cancel;
  StrEditDialog.Controls.Add(StrEditDialogCancel);

  StrEditDialogTextBox := System.Windows.Forms.TextBox.Create;
  StrEditDialogTextBox.Size := System.Drawing.Size.Create(StrEditDialog.Width-25, 38);
  StrEditDialogTextBox.Location := System.Drawing.Point.Create(10,10);
  StrEditDialog.Controls.Add(StrEditDialogTextBox);


end;

procedure StrEdit.StrEdit_Leave(sender: System.Object; e: System.EventArgs);
begin
  Self.BackColor := System.Drawing.Color.White;
  parent.BackColor := System.Drawing.Color.Red;
end;

procedure StrEdit.StrEdit_Enter(sender: System.Object; e: System.EventArgs);
begin
  Self.BackColor := System.Drawing.Color.Yellow;
  if StrEditDialog.ShowDialog = System.Windows.Forms.DialogResult.OK then
  begin
    Findform.SelectNextControl(self,true,true,true,true);
 end;
end;

procedure StrEdit.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

end.
Was ich festgestellt habe ist: Wenn durch Click auf den OK-Button in das nächste Steuerelement gewechselt wird, dann wird die Prozedur StrEdit_Leave nicht ausgeführt. Sollte sie m.E. aber, da ja zweifelsfrei das Steuerelement verlassen wird.

Vielleicht kann mir an Hand des o.a. Quelltextes jemand weiterhelfen?

Vielen Dank im Voraus.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat