AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox Einträge editieren

Ein Thema von Chemiker · begonnen am 10. Jul 2010 · letzter Beitrag vom 17. Jul 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.665 Beiträge
 
Delphi 12 Athens
 
#1

AW: ComboBox Einträge editieren

  Alt 11. Jul 2010, 16:58
Den letzten Eintrag kannst Du bei mir auch löschen, nur kannst Du den ItemIndex nicht setzen, wenn gar keine Items vorhanden sind
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#2

AW: ComboBox Einträge editieren

  Alt 11. Jul 2010, 17:33
Ich würde auch nicht öfters IndexOf() aufrufen Ich meine O(2n) liegt zwar auch in O(n), aber es halbiert i.A. die Laufzeit

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ComboBox Einträge editieren

  Alt 11. Jul 2010, 23:05
Hallo,

Zitat von DeddyH:
Den letzten Eintrag kannst Du bei mir auch löschen, nur kannst Du den ItemIndex nicht setzen, wenn gar keine Items vorhanden sind
Es gelingt mir nicht den Eintrag zu löschen.

[Edit]
if cBoxServername.Items.Count > 0 then es müssen min. 2 Einträge vorhanden sein, damit die Bedingung zutrifft.
[/Edit]


Zitat von xZise:
Ich würde auch nicht öfters IndexOf() aufrufen Ich meine O(2n) liegt zwar auch in O(n), aber es halbiert i.A. die Laufzeit
Ich glaube nicht das die Ausführungszeit bei einer manuellen Eingabe so relevant ist, zu dem wird wenn nicht Enter oder Entfernen gedrückt wird Zeit eingespart weil IndexOf erst gar nicht aufgerufen wird.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.

Geändert von Chemiker (12. Jul 2010 um 06:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.665 Beiträge
 
Delphi 12 Athens
 
#4

AW: ComboBox Einträge editieren

  Alt 12. Jul 2010, 09:47
[Edit]
if cBoxServername.Items.Count > 0 then es müssen min. 2 Einträge vorhanden sein, damit die Bedingung zutrifft.
[/Edit
Das wäre mir aber neu. Count gibt die Anzahl der Elemente zurück, d.h. ein Count > 0 heißt mindestens ein Element vorhanden.

[edit] OK, hier noch einmal eine überarbeitete Version:
Delphi-Quellcode:
procedure TForm1.cBoxServernameKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var idx: integer;
begin
  //Index einmalig ermitteln
  idx := cBoxServername.Items.IndexOf(cBoxServername.Text);
  //case statt if -> IMHO übersichtlicher und schneller
  case Key of
    VK_RETURN: begin
                 //wenn Text nicht vorhanden und
                 //nicht nur aus Leer- bzw. Steuerzeichen bestehend -> eintragen
                 if (idx = -1) and (trim(cBoxServername.Text) <> '') then
                   cBoxServername.Items.Add(cBoxServername.Text);
               end;
    VK_DELETE: begin
                 //wenn Eintrag gefunden
                 if idx > -1 then
                   begin
                     //Eintrag löschen
                     cBoxServername.Items.Delete(idx);
                     //Erst einmal den alten Text löschen
                     cBoxServername.Text := '';
                     //-> wird ggf. durch geänderten Index neu gesetzt
                     if cBoxServername.Items.Count > 0 then
                       cBoxServername.ItemIndex := 0;
                     //notwendig, da Anzeige sonst nicht aktualisiert wird
                     Key := 0;
                   end;
               end;
  end;
end;

procedure TForm1.cBoxServernameKeyPress(Sender: TObject; var Key: Char);
begin
  //"Bimmeln" unterbinden
  if Key = sLineBreak[1] then
    Key := #0;
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (12. Jul 2010 um 10:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ComboBox Einträge editieren

  Alt 12. Jul 2010, 18:41
Hallo DeddyH,

Zitat von DeddyH:
Das wäre mir aber neu. Count gibt die Anzahl der Elemente zurück, d.h. ein Count > 0 heißt mindestens ein Element vorhanden.
Nochmal zur Klärung:

Count = 0 erster Eintrag
Count = 1 zweiter Eintrag

Wenn Count > 0 // sollte Count mindestens 1 sein um die Bedienung zu erfüllen, oder?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

AW: ComboBox Einträge editieren

  Alt 12. Jul 2010, 19:27
Hallo DeddyH,

Zitat von DeddyH:
Das wäre mir aber neu. Count gibt die Anzahl der Elemente zurück, d.h. ein Count > 0 heißt mindestens ein Element vorhanden.
Nochmal zur Klärung:

Count = 0 erster Eintrag
Count = 1 zweiter Eintrag

Wenn Count > 0 // sollte Count mindestens 1 sein um die Bedienung zu erfüllen, oder?

Bis bald Chemiker
Denke nochmal über den Unterschied zwischen Count und Index nach. Count ist die Anzahl der Elemente. Wenn es ein Element gibt, hat das meistens den Index 0.
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#7

AW: ComboBox Einträge editieren

  Alt 12. Jul 2010, 19:38
Hallo DeddyH,

Zitat von DeddyH:
Das wäre mir aber neu. Count gibt die Anzahl der Elemente zurück, d.h. ein Count > 0 heißt mindestens ein Element vorhanden.
Nochmal zur Klärung:

Count = 0 erster Eintrag
Count = 1 zweiter Eintrag

Wenn Count > 0 // sollte Count mindestens 1 sein um die Bedienung zu erfüllen, oder?

Bis bald Chemiker
Ich hoffe du verstehst selbst, dass deine Aussage nicht korrekt sein kann. Count heisst "zähle" Wenn es keinen Eintrag in der Liste hat, dann ergibt count auch 0.

Zum besseren Verständnis:

Delphi-Quellcode:

//Kein Eintrag in der Liste
combobox1.Items.Clear;
showmessage(inttostr(combobox1.Items.Count));


//4 Einträge zur Liste hinzufügen
for i:= 0 to 3 do
  combobox1.items.add('test-'+inttostr(i));

showmessage(inttostr(combobox1.Items.Count));
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.665 Beiträge
 
Delphi 12 Athens
 
#8

AW: ComboBox Einträge editieren

  Alt 12. Jul 2010, 19:42
Probier doch einfach meine überarbeitete Version aus und beobachte die Werte im Debugger
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: ComboBox Einträge editieren

  Alt 17. Jul 2010, 13:25
[Edit]
Delphi-Quellcode:
procedure TForm1.cBoxServernameKeyPress(Sender: TObject; var Key: Char);
begin
  //"Bimmeln" unterbinden
  if Key = sLineBreak[1] then
    Key := #0;
end;
[/edit]
Hallo DaddyH. Ich hätte mal eine Frage. Wie funktioniert sLineBreak[1] und vor allem: Wie willst du damit das "Bimmeln" unterdrücken? Wär super wenn du das kurz umreissen könntest, weil mich das auch schon ewig nervt bei OnKeyDown
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.665 Beiträge
 
Delphi 12 Athens
 
#10

AW: ComboBox Einträge editieren

  Alt 17. Jul 2010, 14:02
Hallo Hans,

die Konstante sLineBreak ist unter Windows als #13#10 (CRLF) definiert, ich hätte also auch gleich #13 schreiben können. Da einige damit aber immer wieder durcheinanderkommen, habe ich mich entschieden, das so zu schreiben, dass jeder weiß, dass damit das erste Zeichen der Konstanten gemeint ist. Und da Windows nunmal einen Ton ausgibt, wenn man im Eingabefeld einer ComboBox RETURN drückt, muss man das Zeichen eben entwerten, indem man ihm den Wert 0 zuweist (es ist ja nicht ohne Grund ein Var-Parameter). Im OnKeyDown-Ereignis kommt das RETURN trotzdem an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz