Klasse erstellen? x-mal Darstellung einer Zeilen (Zeile Enthält, Label, Msg-Box, Ausgabefeld etc.) mit verschiedenen Parametern

  • VB.NET

Es gibt 90 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Der index war ausserhalb des ARRAY bereichs

    Eine Instanz mit IndexCount 0 ist i.o


    Sobald der IndexCount den Wert 1 hat, gibt es den Fehler an dieser Stelle.


    VB.NET-Quellcode

    1. Btn_Info(IndexCount).Name = "Button" & IndexCount.ToString


    Meine Frage ist also wie definiere ich den (IndexCount) in abgängigkeit von zu erstellenden Komponenten.

    Danke für Eure Inputs

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „carepicha“ ()

    Ich nehme an, Btn_Info() ist ein Array. Ein Array hat aber von dir bei der Deklaration festgelegte Dimensionen. Daher ist ein Array für sowas ungeeignet. Eine List ist da besser. Und deine Form (oder der übergeordnete Container) verfügt bereits über eine solche List(Of Controls): FormSowieso.Controls
    Du unterscheidest deine Buttons ja sowieso an Hand des Namens. Nach dem Hinzufügen mit DeineForm.Controls.Add(DeinButton) kannst du ihn in der Liste mit einer ForEach-Schleife durch Vergleich des Namens suchen und bearbeiten. Auch kannst du die dynamisch hinzugefügten Buttons alle auf 1 Click-Event setzen und dort über den Sender-Parameter wieder den Button identifizieren und in die entsprechende Sub verzweigen.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    RodFromGermany schrieb:

    Du kannst die Gruppen in ein Array oder List(Of Group) packen und per Index drauf zugreifen.
    ach aus dem Integer ggf. ein Enum, das liest sich einfacher.


    hmmmm, Rod From Germany hat beim #2 ein Array oder List (Of Group) vorgeschlagen.

    Ich denke du sprichts auch von einer List (Of Group) oder?
    Falls ja, so werde ich mich mal über die List's hermachen..........(immerhin viel über Arrays im VB gelernt.......)

    Hast Du ggf. ein Bsp. bei welchem ich etwas abkufpern könnte?

    Danke und Gruss
    Sorry, aber ich blick dein ganzes Vorhaben nicht. Es scheinen sich hier etliche Baustellen zu überschneiden. Mal ist von einer Group die Rede (was auch immer das sein soll), dann wieder Buttons, dann ne Excel-Tabelle...
    Bei deiner letzten Frage hast du einen Button initialisiert und einem - offenbar falsch dimensionierten Array - übergeben. Darum schlug ich vor, eine List (Of Dingens) zu nehmen, da diese dynamisch erweitert werden kann.

    Ich gewinne aber immer mehr den Eindruck, dass es um eine Datenanwendung geht. Hast du dich mal mit einem DataGridView und der zugehörigen Datenbindung beschäftigt? Ein DataGridView ist wie eine Tabelle aufgebaut, wobei die Spalten nicht nur Textfelder sondern auch Steuerelemente wie Comboboxen, Checkboxen oder Buttons darstellen können. Eine Zeile kann also quasi als Gruppierung von Steuerelementen angelegt werden. Die Anzahl der Zeilen entspricht der gebundenen Tabelle.
    Du scheinst hier mit deinem Vorhaben unnötigen Kopfstände zu veranstalten.

    Fiel Grütze

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Danke für deinen Input, ich versuchs nochmals zu erklären.

    Was du rot im Anhang sieht, möchte ich automatisch erstellen. (Max. 3-4 Seiten, also 21-28 Zeilen)

    Zur genaueren Erläuterung;
    Als Grundlage dient eine Excel Tabelle. Diese Excel Tabelle ist die Verknüpfung zu der SPS (Maschinensteuerung). Die effektiven Werte werden in der SPS abgelegt, stehen somit nicht im Excel, können aber via Tag ausgelesen werden.
    Aufgrund der Eingaben in der Excel Tabelle möchte ich x-Anzahl Zeilen erstellen.

    Entschuldige, wenn ich mich nicht klar ausgedruckt habe. Ich bin in der Zwischenzeit selbst unschlüssig welches der beste Weg ist dies zu realisieren.
    Jetzt hoffe ich aber, dass ich mit Eurer Unterstützung die richtige Richtung einschlagen kann.
    Bilder
    • ScreenShot016.gif

      74,8 kB, 779×559, 71 mal angesehen

    carepicha schrieb:

    Was du rot im Anhang sieht, möchte ich automatisch erstellen. (Max. 3-4 Seiten, also 21-28 Zeilen)

    Da sehe ich genau eine Zeile.
    Wie sind die 3-4 Seiten damit verquickt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich sehe eine Tabelle mit Datensätzen. Da ist typisiertes Dataset für zuständig.
    Ich weiß jetzt nicht das genaus sps-Format, aber unter günstigen Umständen kann typDataset anderweitig generiertes Xml direkt einlesen.

    Die gezeigte Darstellung ist natürlich aufwändiger als Primitiv-DatagridView, aber das ließe sich deichseln.
    Ich bin jetzt nicht der Experte, was Excel in Verbindung mit VB angeht. Da findet sich aber bestimmt was hier im Forum.
    Ich würde folgendes vorschlagen:
    Erstelle ein typisiertes Dataset mit einer Tabelle, die alle benötigten Spalten enthält (hier bei dir z.B. Name, Min, Max, Wert1, Einheit1, Wert2, Einheit2)
    Zum typisierten Dataset such mal hier nach Erfinder des Rades. Der hat da gute Tuts zu gemacht.
    Wenn du die Tabelle aus dem Datenquellenfenster auf die Form ziehst, hast du das Datagridview komplett gebunden und kannst des nach deinen Wünschen gestalten.
    Du brauchst nun nur noch die "Kommunikation" zwischen Dataset und SPS bzw. Excel zu organisieren. Das Datagridview wird bei Änderungen im Dataset und umgekehrt das Dataset bei Änderungen im Datagridview automatisch synchronisiert.
    Bei Änderungen in den Datatables werden Events gefeuert, die du für die Übertragung der Daten zur Steuerung nutzen kannst.
    Du mußt halt dein Vorgehen in Schritte/Baustellen zerlegen und einzeln realisieren.

    Fiel Fergnügen

    Vatter

    Edit: Guggstdu, da isser schon :D , der EDR

    Nochma Edit: Wie du Daten von/zur SPS überträgst interessiert mich mal. Gibs da was mit Siemens-SPS kompatibles, was nicht jene von Siemens bekannten finanziellen Rahmen sprengt?
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Also sind sich alle einig, es soll ein typisiertes Dataset geben?

    Die Kommunikation läuft, nur sollte ich wie gesagt die Tabelle um weiter Zeilen erweiteren und jedes einzelne Button, Tag zu kopieren kann ja wohl nicht die Lösung sein. Deshalb bin ich auf der Suche nach einem besseren weg dies Zeilen einfacher zu gestalten. Ob es dann 3 oder 30 mehr sind spielt ja dann keine Rolle mehr......

    @ RodFromGermany

    In diesem Bsp. sind lediglich 5 Parameter also 5 Zeilen aktiv. Es können aber (momentan) bis 21 Parameter werden und dann werden automatisch weiter TabPage erstellt

    @ Vatter

    Es handelt sich nicht um eine Siemens Steuerung. Es ist eine Beckhoff Anwendung und die Stellen eine XML zur Verfügung.

    carepicha schrieb:

    Also sind sich alle einig, es soll ein typisiertes Dataset geben?
    Ich denk, das ist das sinnvollste.
    Schau mal hier rein: Daten-laden-speichern-verarbeiten-einfachste-variante
    Da hast du schonmal die 1. Etappe
    Wenn deine Anwendung XML bereitstellt, sollte das relativ einfach zu handeln sein. Poste vielleicht mal nen Stück Beispiel von so ner XML-Datei

    Fiel Grütze

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    eine kleine Frage hätte ich noch. Ganz links ist ein Button welcher beim Drücken den Text aus dem Excel holt.
    So wie ich das verstanden habe ist die Darstellung eines DataSet wie eine Excel Liste (reine Felder)

    1. Kann in einem DatenSet auch ein Button plaziert werden mit welchem anschliessend eine neue Form geladen wird ?
    2. Etwas vorausschauend möchte ich auch einen Datenlogger machen. Sprich wenn ein Paramter verstellt wird die Änderung in ein neues File schreiben. Gibt es jetzt schon etwas, dass ich diesbezüglich berücksichtigen müsste? Habt ihr Erfahrungen mit einer solchen Anwendung?

    Danke für Eure Inputs

    carepicha schrieb:

    Kann in einem DatenSet auch ein Button plaziert werden

    Schon für diesen Gedanken musst du in der Hölle schmoren (naja, Viertelstunde vielleicht ;))
    Ein Button ist ein Control, und ein Dataset sind Daten. Kann man Controls in Daten plazieren (mal angenommen, man nehme es ernst, das Konzept der Trennung von Oberfläche und Daten)?
    "Datensets" gibts übrigens ühaupt nicht.

    Was hingegen kein Problem ist, einem DatagridView eine DatagridviewButtonColumn angedeihen zu lassen.

    Aber bitte! Halte das Zeug auseinander. Wichtiger noch als inne Anwendung ist, dass man im Kopf Daten und Steuerelemente auseinanderhalten kann.
    Ich bin am schmoren und du hast natürlich absolut recht. Ich spreche natürlich lediglich von der grafischen Ansicht.

    Wenn du nochmals mein Screenshot anschauts, wird es möglich sein die Ansicht so zu gestalten? Sämtliche DataGridView list die ich gefunden habe sehen sehr tabelarisch aus. Da es sich um ein Bediener Interface handelt sollte die Bedieneroberfläche schon etwas hergeben.
    Tatsächlich binnich unsicher, was wohl für ein Datenmodell hinter dieser Ansicht steckt:

    Zeigt das linke Bildchen eine Liste von Datensätzen, die alle die gleichen Properties präsentieren, nämlich Icon, Name, Minimum, Maximum, CurrentValue, Maßeinheit, Percent?

    Oder zeigt die Ansicht verschiedene Properties desselben Datensatzes, nämlich Vorstop, Stapel-Inkrement, Stapel-Zähler, Saugdauer, Blasdauer, ...., die man nicht über einen Kamm scheren sollte?

    Im ersten Fall könnteman vlt. ein DatagridView pimpen, im zweiten Fall wäre es ein DetailView eines Datensatzes.

    Für beides gibts vorgesehene Lösungen, und je spezieller mans haben will desto mehr Arbeit machts natürlich. Aber die Arbeit machts so oder so, und mit einem vernünftigen Datenmodell ists mit sicherheit leichter.
    Das linke "Bildchen" ist ein Hilfe Button. Wird dieser betätigt, so wird die entsprechende Beschreibung für den Parameter aufgerufen.

    Zu einem Datensatz gehören also immer, (so sind diese auch im Excel abgelegt 1 Excel Zeile = 1 Parameter mit den Angaben unten wie unten beschrieben)

    Info Button, => Hinter diesem ist eine Beschreibung zum Parameter hinterlegt
    Name,
    TagName, (in dieser Ansicht nicht Sichtbar, aber dies ist der NameTag wie er im Excel hinterlegt ist, wird benötigt für die Kommunikation zur SPS, und in diesem Tag ist auch der Wert enthalten. Der Wert wird somit beim Aufstart von der SPS übernommen)
    Minimum,
    Maxium,
    Current Value, (hier kann eine Eingabe getätigt werden, sofern der Passwortlevel erfüllt ist)
    Masseinheit
    % (Option, nicht bei allen)

    Denkst Du mit einem DataGridView eine schönes Interface machen zu können welches nicht tabelarisch wirkt? Wenn irgendie möglich möchte ich die Optik nicht ändern.

    Nochmals wie oben schon mal gefragt. Lässt sich mit dem DataGridView auch ein Logger bauen? Ich möchte gemachte Änderungen (Current Value) protokollieren.


    P.S Ich hatte das gefühl ich war mit der Array-Lösung ziemlich nahe dran, es fehlte noch am übergeben des Instanzwertes beim erstellen der Seite.....

    carepicha schrieb:

    Denkst Du mit einem DataGridView eine schönes Interface machen zu können welches nicht tabelarisch wirkt?

    seh ich kein problem in diesem Fall: Gridlines und Spaltenköpfe verstecken, RowHeight erhöhen, für die Icon-Spalte eine Button-Column oder eine ImageColumn, hübschere BackColor im DefaultCellStyle festlegen.
    Nur die Zahlen im Rähmchen wären ein Fall für OwnerDrawing im _CellPainting.

    Mehr Problem sehe ich in dieser Frage:

    carepicha schrieb:

    Lässt sich mit dem DataGridView auch ein Logger bauen?
    Es ist dir offensichtlich nicht möglich, Daten und Controls auseinanderzuhalten.

    Weil loggen tut man Daten - ein DatagridView wird nie loggen können, das kann nur Daten präsentieren (also anzeigen bzw. UserEingaben entgegennehmen).
    das wär dann wohl nochmals die Schmor-Ecke für mich........macht Sinn.

    Ein DataGridView auf verschieden TabPage aufteilen ist auch möglich, oder gibt es in jeden Fall eine Scroll-Balken?


    Ich formuliere meine Frage nochmals neu;
    Wie soll der Programmaufbau aussehen, damit wir loggen können?
    Momentan werden lediglich die Werte zwischen SPS und VISU direkt via TAG geändert.
    Damit ein Logging möglich ist, müssen diese ja abgelegt werden damit Änderungen überhaupt erkannt werden können.

    carepicha schrieb:

    Ein DataGridView auf verschieden TabPage aufteilen ist auch möglich, oder gibt es in jeden Fall eine Scroll-Balken?
    Du wirst wohl für immer braten müssen ;)
    Ein DatagridView kann man nicht aufteilen - was für eine Vorstellung!
    U.U. kann man die Daten aufteilen, und gruppenweise in verschiedenen DGVs auf verschiedenen Tabpages präsentieren.
    Ob das Sinn macht, sei dahingestellt.

    carepicha schrieb:

    Momentan werden lediglich die Werte zwischen SPS und VISU direkt via TAG geändert.
    ein unverständlicher Satz.
    Sps soll wohl ein Prog sein, was Xml-Dateien exportiert.
    Visu is glaub ein anneres Prog, von dem ich garnix weiss.
    Was sind wohl "Werte zwischen Sps und Visu"? ?(
    Und wie man irgendetwas "via Tag" ändert ist mir auch ganz unerfindlich.

    carepicha schrieb:

    Damit ein Logging möglich ist, müssen diese ja abgelegt werden damit Änderungen überhaupt erkannt werden können.
    Unter "Werte" verstehe ich Werte von Datensätzen, also ein Datensatz fasst verschiedenste Werte zu einer Einheit zusammen.

    Unter Logging verstehe ich das Anlegen und speichern von Log-Datensätzen - entweder in Extra-Dateien schreiben, oder ebenfalls in die Datenbank.
    Im Dataset werden bei jeder Änderung Events gefeuert - die kann man nutzen, um in dem Moment einen Log-Datensatz zu erzeugen.