| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: vb.net: Fragen zum Formular mit Änderungen (797 mal gelesen)
|
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 18. Mai. 2009 11:54 <-- editieren / zitieren --> Unities abgeben:         
Guten Tag zusammen! Ich wollte eigentlich einmal gerne wissen, wie ihr eure Änderungen im Forumlar macht. Sprich, wenn ich eine Option ankreuze, dass eine andere Option durch das deaktiviert wird und umgekehrt. Mein Fomular wird nun ein wenig unübersichtlich und ich habe schon mehr als 400 Zeilen nur für diese doofen Änderungen und Optionen. Wie man auf dem Bild sehen kann, habe ich diverses Kästchen zum ankreuzen und weitere Optionen auf dem ersten Reiter... je nach dem welche Option aktiviert wurde, werden andere Textfelder und CheckBoxes aktiviert und stehen somit zur Verfügung. Ich habe jetzt langsam das Problem, dass die Änderungen, welche ich per .CheckChanged auffange, langsam aber sicher "sehr lange" dauern! Auch das Debbuging wird sehr mühsam, weil der immer und immer wieder durch die selben Stellen durchlaufen muss. Klizekleiner Auszug: Code:
Private Sub FormChanges_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MVerrunden.CheckedChanged, LSVerrunden.CheckedChanged, Seriell.CheckedChanged, Parallel.CheckedChanged, i_ID.ValueChanged, i_OD.ValueChanged, i_DC.ValueChanged, i_MS.ValueChanged, i_RLS.ValueChanged, i_ChamH.ValueChanged, i_ChamA.ValueChanged, i_R_M.ValueChanged, i_ChamH_LS.ValueChanged, i_ChamA_LS.ValueChanged, Iteration.ValueChanged, MVerrunden.CheckedChanged, LSVerrunden.CheckedChanged, nMeshBoxes1.ValueChanged, TC.MouseClick, TC.MouseDown, FloatingDie.CheckedChanged, SlaveDie.CheckedChanged, Damage.CheckedChanged, OrthogonalSampling.CheckedChanged, Ortho_ID.CheckedChanged, Ortho_OD.CheckedChanged, Ortho_MS.CheckedChanged, Ortho_DC.CheckedChanged, Ortho_RLS.CheckedChanged, Ortho_ChamH_LS.CheckedChanged, Ortho_ChamA_LS.CheckedChanged, Ortho_R_M.CheckedChanged, Ortho_ChamH.CheckedChanged, Ortho_ChamA.CheckedChanged, nSims.KeyUp, MatRemove.Click, MatAdd.Click, List1.DoubleClick, List2.DoubleClick, DoAllMaterials.CheckedChanged, Ejector.CheckedChanged FormChangeLS_Depth() If Me.DoAllMaterials.Checked = False Then Me.List1.SelectionMode = SelectionMode.MultiExtended Me.List2.SelectionMode = SelectionMode.MultiExtended Me.MatRemove.Enabled = True Me.MatAdd.Enabled = True Me.List1.Enabled = True Me.List2.Enabled = True ElseIf Me.DoAllMaterials.Checked = True Then Me.OKButton.Enabled = True Me.List1.SelectionMode = SelectionMode.None Me.List2.SelectionMode = SelectionMode.None Me.MatRemove.Enabled = False Me.MatAdd.Enabled = False Me.List1.Enabled = False Me.List2.Enabled = False End If If (Me.nSims.Text <> "0" And Len(Me.nSims.Text) > 0) Or (Me.DoAllMaterials.Checked = False And Me.List2.Items.Count > 0) Then Me.OKButton.Enabled = True End If If Me.DoAllMaterials.Checked = False And Me.List2.Items.Count = 0 Then Me.OKButton.Enabled = False End If
' und so weiter und so fort.....
Ich erhoffte mir, dass jemand einen einfacheren oder schöneren Weg kennt, als alles in ein Sub zu schreiben! Leider passiert aber so viel, dass meine aktuelle Sub sicher 4x durchläuft und dann bekomme ich einen Fehler, weil die Prozedur NIE in mein Formular.Load Event hineinkommt. Schön wäre es, wenn ich zuerst in den Load Event kommen könnte, und dann erst die Änderungen im Formular vornemhen lassen. Ich lese auch noch aus einer .ini Datei diverse Einstellungen heraus welche wieder Formularänderungen mit sich bringen. Ich bin euch um jeden Rat, Tipp und Hinweis dankbar!! Vielen Dank schon einmal im Voraus!
------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 18. Mai. 2009 13:36 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Hallo, auf den ersten Blick ist da guter Rat schwierig. Ich würde auf jeden Fall nicht alle Events mt einem Eventhandler abfangen. Du sollest dir glaube ich Abhängigkeitsstufen bilden. Das heisst wird ein bestimmter Zustand geändert werden nur Veränderungen vorgenommen die nur eine Stufe darunterliegen. Diese wiederum verfügen über einen eigenen Eventhandler der wiederum nur eine Stufe runter geht. So kannst du auf jeden Fall einfacher verfolgen was da passiert und musst dich nicht um die ganze Maskenlogik auf einmal kümmern. Ausserdem hast du so eine Kettenreaktion vermieden die den gleichen Eventhandler immer wieder triggert. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 18. Mai. 2009 14:45 <-- editieren / zitieren --> Unities abgeben:         
|
VBSpawn Mitglied Programmierer
  
 Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 18. Mai. 2009 15:28 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Zitat: Original erstellt von G. Dawg: Guten Tag zusammen!Ich habe jetzt langsam das Problem, dass die Änderungen, welche ich per .CheckChanged auffange, langsam aber sicher "sehr lange" dauern! Ich erhoffte mir, dass jemand einen einfacheren oder schöneren Weg kennt, als alles in ein Sub zu schreiben! Ich lese auch noch aus einer .ini Datei diverse Einstellungen heraus welche wieder Formularänderungen mit sich bringen.
Hi, also .... hier mein Wissen : 1. nehme man immer OptionGroups (helfen aber nur bedingt bei mehreren Controls die davon abhängen muss immernoch ein False oder soetwas gesetzt werden). 2. ich schalte immer erst alle Controls aus und beschränke mich aufs einschalten. 3. Schau dir mal die AppicationSettings und PropertyBindings von einer Textbox an die kann man Prima miteinander verbinden um default werte zu laden etc.. 4. Platziere die Funktion zum setzen der Werte erst im Load_Event indem du den Event_Handler erst dort hinzufügst und nicht auf den default des Controls verwendest..... (Stichwort AddHandler) Code:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged 'nicht verwenden am besten Löschen :] Stop End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Me.TextBox1.Text = "ABC" AddHandler TextBox1.TextChanged, AddressOf TextAendern Me.TextBox1.Text = "DEF" End Sub Private Sub TextAendern(ByVal sender As System.Object, ByVal e As System.EventArgs) Stop End Sub
Gruß Micha
------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 18. Mai. 2009 15:46 <-- editieren / zitieren --> Unities abgeben:         
Oh! Das sieht auch seeeeeehr interessant aus, Micha! Ich werde nun meine Subs fertig schreiben, und dann zum Schluss, werde ich einmal Dein System versuchen anzuwenden. Punkt 4 : Dein System kann ich ja nachträglich noch adaptieren. Darauf bin ich ja mal gespannt! Punkt 3 : Leider hatte ich zuviele Problem mit den My.Settings! Da war plötzlich wieder ein String welcher als Boolean durchgehen wollte und Integer welche sich als Double eingeschlichen haben und noch viel krasser - ich habe nur die Strings und Double sauber hinbekommen. Boolean gingen je nach Wetter auch, aber die Integer wollten einfach gar nicht! Ich mache das jetzt schön sauber in eine .ini Datei rein. Da kann ich alles auflisten und bei Bedarf ausdrucken und auch von Hand manipulieren (und sogar auch jemandem gleich mitgeben). Punkt 2 : Stimmt schon! Das funktioniert auch nicht schlecht!  Bin dann aber wieder gleich weit, wenn ich die auch wieder einschalten muss, wenn sich der User umentscheidet. :-\ Punkt 1 : Da bräuchte ich so viele von den GroupBoxes, dass es schon fast kein Sinn mehr macht. Leider!!! Denn, jeder Parameter sollte mit jedem (FAST!) beliebig kombiniert werden können. Micha, auch Dir ein riesen grosses MERCI!!
------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
  
 Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 20. Mai. 2009 07:39 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Zitat: Original erstellt von G. Dawg:
Punkt 2 : Stimmt schon! Das funktioniert auch nicht schlecht! :) Bin dann aber wieder gleich weit, wenn ich die auch wieder einschalten muss, wenn sich der User umentscheidet. :-\
ein wenig einfacher wird es schon wenn du alle Controls der Form in einer Schleife disables... ggf. könntest du auch Control Collections bilden die für dich logisch zusammengehören und diese Gruppierung speicherst du dir im Tag des Controls (z.b. alle Controls die im Tag eine 1 und eine 2 haben werden aktiviert ...analog dem Tag des Sender Objects) alle anderen werden deaktiviert. Gruß Micha ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 20. Mai. 2009 07:59 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von VBSpawn: ... ggf. könntest du auch Control Collections bilden die für dich logisch zusammengehören und diese Gruppierung speicherst du dir im Tag des Controls (z.b. alle Controls die im Tag eine 1 und eine 2 haben werden aktiviert ...analog dem Tag des Sender Objects) alle anderen werden deaktiviert.
Aha!  Ich habe mir gerade Gestern einmal die Controls.Collection angesehen. Doch leider habe ich nur Bahnhof verstanden und nichts hat funktioniert. Das ist alles sehr neu für mich! Kannst Du mir bitte einen kurzen Schnippsel zeigen, wie ich das genau und am schlausten anwende? Ich hätte nie gedacht, dass ich da praktisch jeden Tag neue Optionen und Möglichkeiten in meine Anwendung einbauen muss. Das ist dann sehr mühsam, wenn man das nicht von Anfang an richtig aufgebaut hat! Da bin ich sehr froh, gibt es dieses Forum und all die freundlichen und fleissigen Helfer!!!
------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
  
 Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 20. Mai. 2009 10:59 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Hi, also ob das der Weisheit letzter Schluß ist... kann ich dir nicht sagen aber immerhin ein Anfang... also das im Anhang kannst du in eine SpielWindowsApp reinkopieren..... es werden 10 Checkboxen und 10 Textboxen erzeugt wenn du eine ungerade Box anklickst werden die ungeraden deaktiviert und umgekehrt.. dies passiert anhand des Tags (1 oder 3 kannst du beliebig ändern)... Wenn du jetzt eine weitere Checkbox & 2 * eine Textbox auf der Form Platzierst und diesen den Tag z.b. 8 gibst hast du quasi 3 Controls in Abhängigkeit gebracht. Gruß Micha
------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 20. Mai. 2009 11:53 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von VBSpawn: ...also ob das der Weisheit letzter Schluß ist... kann ich dir nicht sagen aber immerhin ein Anfang...
Hi, Micha! Auch wenn es nicht der letzte Schuss ist, es ist absolut genial! Nun muss ich mir genau überlegen wie ich das bei mir verbauen kann! Sonst streiche ich mich wieder in eine Ecke rein.  Jetzt weiss ich auch endlich was man mit diese "tägs" da machen kann! Das ist wirklich super genial!! Vielen, vielen Dank nochmals! Gilu. ------------------ http://www.worldcommunitygrid.org
[Diese Nachricht wurde von G. Dawg am 20. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 26. Mai. 2009 11:43 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Also..jetzt muss ich auch noch meinen Senf dazu geben. Ich habe solche Fälle auch ab und an. Dann löse ich das in etwa so: Eine Variable deklarieren, in der steht, ob eine Änderung an Checkboxen etc. manuell erfolgt ist oder nicht Dann baue ich mir ne sub, die alles tut was getan werden muss, wenn eine Checkbox geändert wird. Am Beginn dieser Sub wird interactive auf false gesetzt, am Schluss wieder auf True Und dann füge ich bei jedem Changed-Ereignis der zu überwachenden Controls den Aufruf dieser Sub ein: Durch die Variable Interactive wird verhindert, dass sich das immer in Schleifen aufruft. Code: Public Class Form1 Dim Interactive As Boolean = True Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If Interactive Then DoAnythingWithCheckboxes() End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged If Interactive Then DoAnythingWithCheckboxes() End Sub
Sub DoAnythingWithCheckboxes() Interactive = False TextBox1.Enabled = CheckBox1.Checked TextBox2.Enabled = CheckBox1.Checked CheckBox1.Enabled = CheckBox2.Checked Interactive = True End Sub End Class
Ähnlich mache ich das mit Textboxen etc, wenn da auf Änderungen zu reagieren ist. Wie z.B. Check auf Eingabelänge, Umwandlung in Großbuchstaben bei der Eingabe usw. Ist einfach und hat sich bei mir (für mich) bewährt. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 26. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 27. Mai. 2009 07:50 <-- editieren / zitieren --> Unities abgeben:         
Danke, auch Dir, Klaus, für Deinen Beitrag! Ich muss mir halt eben einmal ein wenig Zeit nehmen und mir all eure Vorschlage durch den Kopf gehen lassen. Denn so ganz einfach ist es eben doch nicht. Ich habe über 30 Controls, welche je nach dem von 3 Haupteinstellungen und 2 Untereinstellungen gesteuert werden sollen. Dazu kommen noch ein paar andere Controls, welche aber relativ einfach zu steuern sind. Dann kommen noch weitere Abfragen hinzu, damit man keinen Mist eingeben kann. Z.B., wo ein Integer rein gehört, sollte man kein Double eingeben können, etc, etc...! Wenn ich wieder einmal solche Sachen machen muss, werde ich den Aufbau schon einmal viiiiel schlauer machen wollen. Das mit den GroupBoxes währe nämlich sehr komfortabel! Das Ding mit dem AddHandler habe ich noch nicht ganz raus. Das muss ich mir unbedingt genauer ansehen... das scheint wirklich das Mass aller Dinge zu sein! ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 27. Mai. 2009 08:30 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Zitat: Original erstellt von G. Dawg: ...Das Ding mit dem AddHandler habe ich noch nicht ganz raus. Das muss ich mir unbedingt genauer ansehen... das scheint wirklich das Mass aller Dinge zu sein! ...
Das mit dem Addhandler war mir auch neu, das muss ich mir merken. "Das Maß aller Dinge..." zumindest bei zur Laufzeit erstellten Controls wie in dem Beispiel von Micha. Bei vorher definierten Controls kannst du natürlich genauso direkt die entsprechenden ..Click-Prozeduren verwenden. Und der Trick mit dem Tag ist auch nicht schlecht. Ich hab das auch schon oft verwendet, um irgendwelche Zusatz-Infos abzulegen, aber diese Idee ist extra gut. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |