AGB  ·  Datenschutz  ·  Impressum  







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

TComboBox +.NET

Ein Thema von skyware · begonnen am 8. Dez 2004 · letzter Beitrag vom 9. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#1

TComboBox +.NET

  Alt 8. Dez 2004, 19:26
Hallo,

hätte da mal ne "simple" Frage...Ihr kennt doch sicherlich die
Combobox unter z.B. Delphi 6, bei der kann man mittels .AddObject(string, object)
einen Eintrag hinzufügen.
Kann mir jemand sagen wie das bei Delphi 2005 gemacht wird?

Steh da momentan auf dem Schlauch....

Gruss und Danke,
Markus
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: TComboBox +.NET

  Alt 8. Dez 2004, 20:57
Zitat von skyware:
Steh da momentan auf dem Schlauch....
Das ist halt der kleine Unterschied zwischen WinForms und VCL.NET. Bei VCL.NET kann man sehr wohl Items.AddObject() aufrufen. Bei WinForms muss man einen Umweg gehen. Dort braucht man eine Hilfsklasse.

Delphi-Quellcode:
type
  TMyItem = class(TObject)
  private
    FText: string;
    FObj: TObject;
  public
    function ToString: string; override;
    property Text: string read FText write FText;
    property Obj: TObject read FObj write FObj;
  end;

function TMyItem.ToString: string;
begin
  Result := Text;
end;
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: TComboBox +.NET

  Alt 8. Dez 2004, 21:32
Hallo,

vielen Dank für Deine Hilfe! Hat super geklappt
Finde es allerdings schon ziemlich umständlich zu handhaben...eieiei.
Da tut man sich ja gut daran eine eigene TComboBox Klasse abzuleiten
um den Zugriff zu vereinfachen

schönen Abend noch!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: TComboBox +.NET

  Alt 8. Dez 2004, 21:41
Oder man nimmt VCL.NET
WinForms ist ja schon als deprecated auf den Markt gekommen.
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: TComboBox +.NET

  Alt 8. Dez 2004, 21:45
...aber mit VCL.NET wird es ja nie unter Linux laufen,
und ich bin schon der Hoffnung das man früher oder später die
WinForms mittels Mono auf Linux zum laufen kriegt
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: TComboBox +.NET

  Alt 9. Dez 2004, 00:10
Ich wußte erst nicht, ob ich hier wirklich posten soll... Aber nun ist es zu spät.

Zitat von jbg:
Oder man nimmt VCL.NET
WinForms ist ja schon als deprecated auf den Markt gekommen.
Der war gut.

Zitat von skyware:
Finde es allerdings schon ziemlich umständlich zu handhaben...eieiei.
Solange du in VCL statt in FCL denkst ist natürlich alles kompliziert.

Es gibt in .Net so eine nette Sache, die nennt sich DataBinding.
Das heißt, du kannst alles was IList implementiert an jedes Control binden. (oder besser jedes Control an... )
Wie sieht das aus?

In dem Schnipsel wird eine Collection mit 4 Items gefüllt und anschließend an eine ComboBox und ein DataGrid gehängt:
Code:
   ItemWithIdCollection itemCollection = new ItemWithIdCollection();

   itemCollection.Add("eins", 1);
   itemCollection.Add("zwei", 2);
   itemCollection.Add("drei", 3);
   itemCollection.Add("vier", 4);
   itemCollection.DisplayFormat = "{1}: {0}";

   EineComboBox.DataSource = itemCollection;
   EinDataGrid.DataSource = itemCollection;
Es macht IMHO wenig Sinn Daten _IN_ ein Control zu stecken. Viel logischer ist es doch eine Collection daran zu binden, dadurch kannst du die Daten auch an ein anderes Control packen (siehe Anhang) und sie verschenden ohne einen Krampf dabei zu kriegen.
Dieses ständige herumgecaste aus den ComboBox Items wäre sicher ein Krampf.

Und hier ist die Itemklasse bzw, die CollectionBase-Ableitung (tippt sich schneller als es aussieht ):
BTW: CollectionBase ist der "faule" Weg einer typsicheren IList implementierung
Code:
using System.Collections;

namespace Samples.DataBinding.ComboBoxItems
{
   /// <summary>
   /// Ein bißchen Text mit einer numerischen ID.
   /// </summary>
   public class ItemWithId
   {
      string text;
      int id;
      internal ItemWithIdCollection collection;

      #region Properties

      public string Text
      {
         get { return text; }
         set { text = value; }
      }

      public int Id
      {
         get { return id; }
         set { id = value; }
      }

      #endregion
      /// <summary>
      /// Gibt die Daten/den Text Items aus.
      /// </summary>
      /// <remarks>
      /// Gehört das Item zu einer Collection, bei der <see cref="ItemWithIdCollection.DisplayFormat">DisplayFormat</see>
      /// besetzt wurde, wird dieses Format verwendet.
      /// </remarks>
      public override string ToString()
      {
         if (collection != null &&
            collection.DisplayFormat != string.Empty)
            return string.Format(collection.DisplayFormat,
                                 text,
                                 id);
         else
            return text;
      }

      #region construtors

      public ItemWithId(string text, int id)
      {
         this.text = text;
         this.id = id;
      }

      public ItemWithId()
      {
         text = string.Empty;
      }

      #endregion
   }


   public class ItemWithIdCollection : CollectionBase
   {
      string displayFormat;

      #region Properties
      /// <summary>
      /// Damit kann das Ausgabeformat betimmt werden.
      /// </summary>
      /// <remarks>
      /// Ist dieser Wert leer wird nur der Text dargestellt.
      /// Die Syntax entspricht <see cref="System.String.Format">String.Format</see>
      /// </remarks>
      public string DisplayFormat
      {
         get { return displayFormat; }
         set
         {
            if (value != null)
               displayFormat = value;
            else
               displayFormat = string.Empty;
         }
      }

      /// <summary>
      /// StiNo indexer ;-)
      /// </summary>
      public ItemWithId this[int index]
      {
         get { return base.List[index] as ItemWithId; }
         set { base.List[index] = value; }
      }

      #endregion

      public void Add(ItemWithId item)
      {
         item.collection = this;
         base.InnerList.Add(item);
      }

      public ItemWithId Add(string text, int id)
      {
         ItemWithId item = new ItemWithId(text, id);
         item.collection = this;
         base.InnerList.Add(item);
         return item;
      }

      public ItemWithIdCollection()
      {
         displayFormat = string.Empty;
      }
   }
}
Nachtrag:
Bevor jetzt jemand rumeckert: Ja es ist nicht Delphi und ja es ist C#. Warum? Ganz einfach, Delphi macht unter Win32 Sinn (fehlende Konkurrenz), unter .Net sehe ich keinen Sinn in der eingestaubten Delphi-Syntax.
Edit: gans böhse Schlechtschreibung.
Miniaturansicht angehängter Grafiken
samples.databinding.jpg  
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: TComboBox +.NET

  Alt 9. Dez 2004, 06:14
Zitat von skyware:
Finde es allerdings schon ziemlich umständlich zu handhaben...eieiei.
muss mich da mal selbst korrigieren, im Nachhinein gesehen ist das gar
nicht umständlich und sogar sehr praktisch.
Der Combobox Eintrag zeigt ja schliesslich immer auf ein Objekt, mit dem
ich bei der Eintrag Selektion was bewirken möchte.
Daher ist es sogar ne super Lösung das man einfach nurnoch die
Funktion ".ToString" implementieren muss, um so die Textdarstellung zu handeln.

Es bedarf wohl noch einiger Umgewöhnung (Syntax wie auch Denkhaltung) meinerseits
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: TComboBox +.NET

  Alt 9. Dez 2004, 07:37
Zitat von Robert_G:
Bevor jetzt jemand rumeckert: Ja es ist nicht Delphi und ja es ist C#. Warum?
Die Frage lässt sich doch ganz einfach klären: skyware fragte nach eine Lösung/Idee für Delphi 2005 und da gehört C# mit zum Umfang


Zitat:
unter .Net sehe ich keinen Sinn in der eingestaubten Delphi-Syntax.
Das wird Borland höchstwahrscheinlich anders sehen. Aber die eigene Meinung und Preferenzen kann man nicht zugewiesen bekommen, um das mal programmiertechnisch auszudrücken. Und C# ist eine schöne Sprache, die die vorteile aus C++ und Delphi vereint. Mit C# 2.0 ist auch dieses kompliziertere Delgate-Zusweisungskonzept verbessert worden.
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: TComboBox +.NET

  Alt 9. Dez 2004, 11:32
schlussendlich spielt es doch keine Rolle mit welcher Entwicklungsumgebung
man .NET Programme erzeugt, oder?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: TComboBox +.NET

  Alt 9. Dez 2004, 23:18
Genau, man kann auch gleich auf alles verzichten und sich mit ilasm beschäftigen. (Lese-Kenntnisse sollte man auf jedenfall mal vom ilasm haben).
  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 10:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz