|
![]() |
Ich habe mir ein paar Nächte um die Ohren geschlagen um eine Navigationsleiste für Delphi Datasets zu erstellen. Es handelt sich um eine UserControl. Diese muß während der Laufzeit (am besten im Load-Event) noch mit einen DataSet und mit einer Tabelle verbunden werden.
Delphi-Quellcode:
procedure Winform1.FTalente_Load(sender: System.Object; e: System.EventArgs);
begin //Hier ist die Navigation bereits auf der Form gesetzt worden Navigation.BindingBase(MyDataSet, 'MeineTabellenNameAlsString'); end;
Delphi-Quellcode:
Edit: Es handelt sich um 7 Buttons und ein Textfeld. Die 7 Buttons übernehmen die Aufgaben des Navigierens Vor, Zurück, Erster und Letzter Datensatz, sowie löschen und einfügen. Der Button Save muß je nach Zugriff noch umgeschrieben werden.
unit CNavigation;
interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, System.Resources; type Navigation = class(System.Windows.Forms.UserControl) {$REGION 'Vom Designer verwalteter Code'} strict private /// <summary> /// Erforderliche Designervariable. /// </summary> components: System.ComponentModel.IContainer; btnFirst: System.Windows.Forms.Button; btnPrior: System.Windows.Forms.Button; btnNext: System.Windows.Forms.Button; btnLast: System.Windows.Forms.Button; Buttons: System.Windows.Forms.ImageList; btnNew: System.Windows.Forms.Button; btnDelete: System.Windows.Forms.Button; btnSave: System.Windows.Forms.Button; TextBox1: System.Windows.Forms.TextBox; /// <summary> /// Erforderliche Methode zur Unterstützung des Designers - /// ändern Sie die Methode nicht mit dem Quelltext-Editor /// </summary> procedure InitializeComponent; procedure btnFirst_Click(sender: System.Object; e: System.EventArgs); procedure btnPrior_Click(sender: System.Object; e: System.EventArgs); procedure btnNext_Click(sender: System.Object; e: System.EventArgs); procedure btnLast_Click(sender: System.Object; e: System.EventArgs); procedure btnDelete_Click(sender: System.Object; e: System.EventArgs); procedure btnNew_Click(sender: System.Object; e: System.EventArgs); procedure btnSave_Click(sender: System.Object; e: System.EventArgs); procedure TextBox1_Enter(sender: System.Object; e: System.EventArgs); procedure TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs); procedure TextBox1_TextChanged(sender: System.Object; e: System.EventArgs); procedure TextBox1_Leave(sender: System.Object; e: System.EventArgs); procedure TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs); {$ENDREGION} strict protected /// <summary> /// Ressourcen nach der Verwendung bereinigen /// </summary> procedure Dispose(Disposing: Boolean); override; private { Private-Deklarationen } myBindingManagerBase : BindingManagerBase; ICurrentPosition : Integer; MyTable : String; MyDataSet : DataSet; Changing : boolean; procedure BindingManagerBase_CurrentChanged(sender: System.Object; e: System.EventArgs); procedure BindingManagerBase_PositionChanged(sender: System.Object; e: System.EventArgs); procedure write_Position(pos:integer); procedure finde_Datensatz(pos: integer); public constructor Create; procedure BindingBase(aDataSet : Dataset; aTable : String); published property Position : integer read ICurrentPosition write write_Position; end; [assembly: RuntimeRequiredAttribute(TypeOf(TNavigation))] 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 TNavigation.InitializeComponent; var resources: System.Resources.ResourceManager; begin Self.components := System.ComponentModel.Container.Create; resources := System.Resources.ResourceManager.Create(TypeOf(TNavigation)); Self.btnFirst := System.Windows.Forms.Button.Create; Self.Buttons := System.Windows.Forms.ImageList.Create(Self.components); Self.btnPrior := System.Windows.Forms.Button.Create; Self.btnNext := System.Windows.Forms.Button.Create; Self.btnLast := System.Windows.Forms.Button.Create; Self.btnDelete := System.Windows.Forms.Button.Create; Self.TextBox1 := System.Windows.Forms.TextBox.Create; Self.btnNew := System.Windows.Forms.Button.Create; Self.btnSave := System.Windows.Forms.Button.Create; Self.SuspendLayout; // // btnFirst // Self.btnFirst.ImageIndex := 0; Self.btnFirst.ImageList := Self.Buttons; Self.btnFirst.Location := System.Drawing.Point.Create(1, 1); Self.btnFirst.Name := 'btnFirst'; Self.btnFirst.Size := System.Drawing.Size.Create(40, 23); Self.btnFirst.TabIndex := 0; Include(Self.btnFirst.Click, Self.btnFirst_Click); // // Buttons // Self.Buttons.ColorDepth := System.Windows.Forms.ColorDepth.Depth16Bit; Self.Buttons.ImageSize := System.Drawing.Size.Create(16, 16); Self.Buttons.ImageStream := (System.Windows.Forms.ImageListStreamer(resources.GetObject('B' + 'uttons.ImageStream'))); Self.Buttons.TransparentColor := System.Drawing.Color.FromArgb((Byte(254)), (Byte(0)), (Byte(254))); // // btnPrior // Self.btnPrior.ImageIndex := 1; Self.btnPrior.ImageList := Self.Buttons; Self.btnPrior.Location := System.Drawing.Point.Create(40, 1); Self.btnPrior.Name := 'btnPrior'; Self.btnPrior.Size := System.Drawing.Size.Create(40, 23); Self.btnPrior.TabIndex := 1; Include(Self.btnPrior.Click, Self.btnPrior_Click); // // btnNext // Self.btnNext.ImageIndex := 2; Self.btnNext.ImageList := Self.Buttons; Self.btnNext.Location := System.Drawing.Point.Create(152, 1); Self.btnNext.Name := 'btnNext'; Self.btnNext.Size := System.Drawing.Size.Create(40, 23); Self.btnNext.TabIndex := 2; Include(Self.btnNext.Click, Self.btnNext_Click); // // btnLast // Self.btnLast.ImageIndex := 3; Self.btnLast.ImageList := Self.Buttons; Self.btnLast.Location := System.Drawing.Point.Create(191, 1); Self.btnLast.Name := 'btnLast'; Self.btnLast.Size := System.Drawing.Size.Create(40, 23); Self.btnLast.TabIndex := 3; Include(Self.btnLast.Click, Self.btnLast_Click); // // btnDelete // Self.btnDelete.ImageIndex := 4; Self.btnDelete.ImageList := Self.Buttons; Self.btnDelete.Location := System.Drawing.Point.Create(230, 1); Self.btnDelete.Name := 'btnDelete'; Self.btnDelete.Size := System.Drawing.Size.Create(40, 23); Self.btnDelete.TabIndex := 6; Include(Self.btnDelete.Click, Self.btnDelete_Click); // // TextBox1 // Self.TextBox1.Font := System.Drawing.Font.Create('Microsoft Sans Serif', 10.25, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (Byte(0))); Self.TextBox1.Location := System.Drawing.Point.Create(78, 0); Self.TextBox1.Name := 'TextBox1'; Self.TextBox1.Size := System.Drawing.Size.Create(75, 23); Self.TextBox1.TabIndex := 8; Self.TextBox1.Text := 'TextBox1'; Self.TextBox1.TextAlign := System.Windows.Forms.HorizontalAlignment.Right; Include(Self.TextBox1.KeyDown, Self.TextBox1_KeyDown); Include(Self.TextBox1.KeyPress, Self.TextBox1_KeyPress); Include(Self.TextBox1.TextChanged, Self.TextBox1_TextChanged); Include(Self.TextBox1.Leave, Self.TextBox1_Leave); Include(Self.TextBox1.Enter, Self.TextBox1_Enter); // // btnNew // Self.btnNew.ImageIndex := 5; Self.btnNew.ImageList := Self.Buttons; Self.btnNew.Location := System.Drawing.Point.Create(269, 1); Self.btnNew.Name := 'btnNew'; Self.btnNew.Size := System.Drawing.Size.Create(40, 23); Self.btnNew.TabIndex := 9; Include(Self.btnNew.Click, Self.btnNew_Click); // // btnSave // Self.btnSave.ImageIndex := 6; Self.btnSave.ImageList := Self.Buttons; Self.btnSave.Location := System.Drawing.Point.Create(308, 1); Self.btnSave.Name := 'btnSave'; Self.btnSave.Size := System.Drawing.Size.Create(40, 23); Self.btnSave.TabIndex := 10; Include(Self.btnSave.Click, Self.btnSave_Click); // // TNavigation // Self.Controls.Add(Self.btnSave); Self.Controls.Add(Self.btnNew); Self.Controls.Add(Self.TextBox1); Self.Controls.Add(Self.btnDelete); Self.Controls.Add(Self.btnLast); Self.Controls.Add(Self.btnNext); Self.Controls.Add(Self.btnPrior); Self.Controls.Add(Self.btnFirst); Self.Name := 'TNavigation'; Self.Size := System.Drawing.Size.Create(349, 24); Self.ResumeLayout(False); end; {$ENDREGION} constructor TNavigation.Create; begin inherited Create; // // Erforderlich für die Unterstützung des Windows Forms-Designers // InitializeComponent; changing := false; // // end; procedure TNavigation.btnLast_Click(sender: System.Object; e: System.EventArgs); begin myBindingManagerBase.Position := myBindingManagerBase.Count - 1; end; procedure TNavigation.btnNext_Click(sender: System.Object; e: System.EventArgs); begin myBindingManagerBase.Position := myBindingManagerBase.Position + 1; end; procedure TNavigation.btnPrior_Click(sender: System.Object; e: System.EventArgs); begin myBindingManagerBase.Position := myBindingManagerBase.Position -1; end; procedure TNavigation.btnFirst_Click(sender: System.Object; e: System.EventArgs); begin myBindingManagerBase.Position := 0;; end; procedure TNavigation.BindingBase(aDataSet : Dataset; aTable : String); begin MyTable := aTable; MyDataSet := aDataSet; myBindingManagerBase := Self.BindingContext[aDataSet, aTable]; Include(myBindingManagerBase.PositionChanged, BindingManagerBase_PositionChanged); Include(myBindingManagerBase.CurrentChanged, BindingManagerBase_CurrentChanged); self.Position := 0; end; procedure TNavigation.TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs); begin try convert.toint32(Textbox1.Text); except Textbox1.Text := ''; end; end; procedure TNavigation.TextBox1_Leave(sender: System.Object; e: System.EventArgs); begin changing := false; end; procedure TNavigation.TextBox1_TextChanged(sender: System.Object; e: System.EventArgs); var i, i1 : integer; begin if changing = true then begin if textbox1.text <> '' then begin i := convert.ToInt32(Textbox1.Text); if i > (myBindingManagerBase.Count) then begin textbox1.Text := MyBindingManagerbase.Count.ToString; end else if i < 1 then begin Textbox1.Text := '1'; end; end; end; end; procedure TNavigation.TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs); begin if not( e.KeyChar in ['0'..'9']) then begin if e.KeyChar = #13 then begin finde_Datensatz(convert.ToInt32(Textbox1.Text)-1); end; e.Handled := true; end; end; procedure TNavigation.TextBox1_Enter(sender: System.Object; e: System.EventArgs); begin Textbox1.Text := ''; changing := true; end; procedure TNavigation.btnSave_Click(sender: System.Object; e: System.EventArgs); begin // Hier die Speicherprocedure end; procedure TNavigation.btnNew_Click(sender: System.Object; e: System.EventArgs); begin MyDataSet.Tables[MyTable].Rows.Add(MyDataSet.Tables[MyTable].NewRow); MyDataSet.AcceptChanges; end; procedure TNavigation.btnDelete_Click(sender: System.Object; e: System.EventArgs); begin self.MyDataSet.Tables[MyTable].Rows.RemoveAt(myBindingManagerBase.Position); end; procedure TNavigation.finde_Datensatz(pos: integer); begin myBindingManagerBase.Position := pos; end; procedure TNavigation.BindingManagerBase_PositionChanged(sender: System.Object; e: System.EventArgs); begin position := BindingManagerBase(sender).Position; end; procedure TNavigation.BindingManagerBase_CurrentChanged(sender: System.Object; e: System.EventArgs); begin position := BindingManagerBase(sender).Position; end; procedure TNavigation.write_Position(pos : Integer); var i, i1 : integer; begin ICurrentPosition := pos; if (position = 0) then begin btnfirst.Enabled := false; btnprior.Enabled := false; btnnext.Enabled := true; btnlast.Enabled := true; end else if (position = (myBindingManagerBase.Count - 1)) then begin btnfirst.Enabled := true; btnprior.Enabled := true; btnnext.Enabled := false; btnlast.Enabled := false; end else begin btnfirst.Enabled := true; btnprior.Enabled := true; btnnext.Enabled := true; btnlast.Enabled := true; end; if myBindingManagerBase <> nil then begin i := myBindingManagerBase.Count; i1 := ICurrentposition+1; textbox1.Text := i1.ToString + ' von ' + i.tostring; end; end; procedure TNavigation.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; end. Edit2: Das Textfeld wird zur direkten Datensatz-Navigation verwendet. Wobei es bei .Net keinen Datensatzzeiger gibt. Für direkte Edits aus den Program gibt es die Eigenschaft Position zum auslesen. Das Textfeld mag nur Zahlen.
Wer Rechtschreibfehler findet, der darf sie behalten
Carpe Diem - Nutze den Tag (und zwar den ganzen!) |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |