| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Zeilenumbruch in Textbox (2027 mal gelesen)
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 06. Mai. 2015 11:13 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander. Ich arbeite grad an einer vergabe der Revision. Ich habe eine Vorlage erstellt mit der wir Baugruppen und Zeichnungen erstellen können. Über eine Vb .net Code können die erstellten Zeichnungen im NAchhinein geändert werden. Gibt es änderungen wird ein Revisionsindex vergeben. Das geht alles... Problem: Der Nutzer gibt den Text für die Änderung in eine Textbox ein. Bei der Revision auf der Zeichnung sind 2 Zeilen möglich. die Texbox ist so eingestellt das sie den Zeilenumbruch so setzt wie es auch auf der Zeichnung passiert. Also wenn der Bearbeiter einen etwas längeren Text schreibt wird dieser in der Textbox mehrzeilig angezeigt. Ich möchte jetzt abfragen ob der Eingegebene Text mehr als 2 Zeilen hat. Mein Problem ist wenn man den Text fortlaufend schreibt. Denn der enstehende String hat kein Zeilenumbruch obwohl einer dargestellt wird in der Textbox. kann mir da jemand helfen?? MfG Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 07:45 <-- editieren / zitieren --> Unities abgeben:
keine ne Idee? Ich hätte vielleicht ein ansatz aber an der Umsetzung scheitert es zur zeit noch. Kann man die Größe einer Textbox nicht an den Inhalt anpassen? geht das veilleicht auch, dass man nur die Höhe anpasst? Also feste Breite und wenn breite nicht ausreicht wird die Textbox höher? Das Problem ist ich finde nicht wo man das einstellen kann unter den Eigenschaften, bzw ob das überhaupt geht. Denn dadurch könnte man die Höhe der Textbox abfragen und wenn die über der Höhe für 2 Zeilen liegt ist der Text zu groß..... Bitte dringend um Hilfe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GeorgK Mitglied
Beiträge: 619 Registriert: 06.06.2001
|
erstellt am: 07. Mai. 2015 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 08:15 <-- editieren / zitieren --> Unities abgeben:
also erstmal danke für die Hilfe, aber das ist die Zeichenanzahl des strings. 1.das ist nicht gleichzusetzen mit der länge, da die Buchstaben eine verschieden Breite haben ( M breitre als I) 2.die funktion len gibt die Zeichenanzahl des gesamten strings zurück, also wenn ein sichtbarer Zeichenumbruch stattfindet interesiert das die len Funktion ni.... Also danke Georg aber mit len geht es ni Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Felix, ich hab dir mal ein Bild angehängt. Wenn du für die max-width einen Wert angibst und das WordWrap auf True stellst, sollte es möglich sein, über ausprobieren zu schauen, welche Höhe das Element bekommt, wenn es mehr als zwei Zeilen hoch wird. Dann einfach ne abfrage, ob der Height-Wert überschritten wird und wenn ja, dann.... Vielleicht geht es ja so... ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 09:34 <-- editieren / zitieren --> Unities abgeben:
Also Chris erstmal vielen dank für deine Antwort. Ich hab es so eingestellt wie du es auf dem Bild gezeigt habe. Wenn ich den Code jetzt ausführe wird die Textbox mit Minimaler Größe angezeigt, ist ja erstmal richtig. Wenn ich aber jetzt in die Textbox schreibe und mehr schreibe als in die box passt passiert nicht. die Größe verändert sich nicht.... hab ich irgendwas übersehen?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Kein Problem Felix ;-) Nicht so einstellen, wie ich es hatte.... In etwa sowas wie auf dem Bild hier zu sehen... Du kannst auch mal versuchen die lines ab zu fragen:
Code:
Dim int As Integer = txtProjektbez.Lines.Count
Tante Edit: Bild vergessen ------------------ MFG
Chris [Diese Nachricht wurde von Chris 31 am 07. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 09:54 <-- editieren / zitieren --> Unities abgeben:
Hä also Chris jetzt versteh ich nicht was der unterschied zu der vorherigen einstellung ist....????? Dim int As Integer = txtRevÄn.Lines.Count bringt mit die Fehlermeldung: "Count" ist kein Member von "System.Array". Und lines von dem string auslesen geht nicht, da der string unabhängig von der anzeige in der Textbox in einer Zeile geschriebn wird.... [Diese Nachricht wurde von Fiedel93felix am 07. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hast du noch das Bild mit den gelben Markierungen? Wenn ja, dann lade mal dein Browser neu... (F5). Seltsam.... bei mir funktioniert das: Code: MsgBox(TextBox1.Lines.Count())
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 10:05 <-- editieren / zitieren --> Unities abgeben:
nein ich habe das neue Bild, aber ich versteh nicht was das ändern soll...??? Du hast doch nur die Maximal Height auf 0 gestellt oder? Ich hab es auch versucht nach dem neuen bild, da passiert auch nichts... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 11:01 <-- editieren / zitieren --> Unities abgeben:
Ich kann den Code nicht probieren da eine Fehlermeldung kommt siehe oben... 2. Wie bereits geschrieben bezweifel ich das es so geht, denn der entstehende string besteht nur aus einer zeile (auch wenn er 2 zeilig dargestellt wird.) Ich habe es schon über: If not TextBox1.Line(2) = "" then versucht, das geht nur wenn man es wirklich mit Enter eingibt, also richtig einen Umbruch eingibt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 07. Mai. 2015 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 11:17 <-- editieren / zitieren --> Unities abgeben:
Ich habe doch gerade geschrieben das es mit der Lines funktion nicht funktioniert, da der enthaltene string nicht dem entspricht wie er angezeigt wird. Deswegen klappt auch length nicht....wenn du fortlaufend schreibst und der dir 2 oder mehr Zeilen anzeigt wird bei length trotzdem 1 zurück gegeben.... Bleiben wir mal bei der Variante mit der Textbox dem Text anpassen.....da denke ich sind wir eher auf dem richtigen Weg
Bloß wie schaffe ich es, dass die Textbox ihre größe anpasst an den Text??ß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hmmmmm.... also ich kann auch nur den Umbruch erkennen, der mit Enter hervorgerufen wird. Mehr fällt mir auch nicht mehr ein... Und der alte Hahn spuckt auch nichts gescheites mehr aus ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 11:38 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Mai. 2015 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
nein, leider nicht.... er schreibt einfach weiter und ändert die Größe nicht... aber ich hab bei Google ein Ergebnis gehabt, wo jemand die Größe dem Text angepasst hat. Ich find es jetzt nur nicht mehr wieder ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 07. Mai. 2015 13:49 <-- editieren / zitieren --> Unities abgeben:
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 07:43 <-- editieren / zitieren --> Unities abgeben:
Also alle miteinander, es gibt einen kleinen Lichtblick. Die Betonung liegt leider noch auf klein... Ich habe folgenden Code: Private Sub txtRevÄn_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRevÄn.TextChanged Dim myFont As New System.Drawing.Font(txtRevÄn.Font.Name, txtRevÄn.Font.Size) Dim textSize As System.Drawing.Size = TextRenderer.MeasureText(txtRevÄn.Text, myFont) If textSize.Width > 190 Then txtRevÄn.Text = Mid(txtRevÄn.Text, 1, InStrRev(txtRevÄn.Text, " ")) & _ vbNewLine & Mid(txtRevÄn.Text, InStrRev(txtRevÄn.Text, " ") + 1) End If End Sub --> txtRevÄn ist der Name meiner TextBox <-- wenn ich jetzt was schreibe und überschreite die Breite meines Fensters springt es in die eine neue Zeile und das nicht nur sichtbar sondern richtig. So das man am ende Zählen kann wie viele Zeilen vorhanden sind. Aber jetzt meine Problem...... 1. Wenn ich schreibe in der Textbox und dann die neue Zeile eingefügt wird springt der Cursour an den Anfang der Textbox, und wenn man dort weiter schriebt kommt ne fehlermeldung. Wie bekomme ich es hin, dass der cursor nicht an den anfang hoppst? Wie bekomme ich es hin das ich im Text was ändern kann ohne das ne Fehlermeldung kommt.... Also ich denk die Fehlermeldung kommt weil ich die breite überschreite, aber dann ja nach dem Letzten leerzeichen suche. Dieses befindet sich aber schon in der nächsten Zeile. D.H. Ich müsste irgendwie jede Zeile einzeln abfragen oder? MfG Felix [Diese Nachricht wurde von Fiedel93felix am 08. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 08:26 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 08:56 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Man, das war ja auch wieder zu einfach.... Code: Public Int As Integer = 1 Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.MultilineChanged Int = Int + 1 End Sub
Mit automatischem Zeilenumbruch und dann klappt das :-D
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 09:21 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 10:10 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Du stellst für die TextBox das WordWrap auf True, und in der Sub für die TextBox stellst du das Handle auf MultilineChanged. Dann setzt du ein Integer ein, welches bei dem Event immer eins aufzählt. Dann eine Abfrage, welchen Wert der Integer hat und dann reagieren, wie du es möchtest. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 11:18 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Nein, leider doch nicht so, dass es zuverlässig ist.... ich hatte ne msgbox anzeigen lassen mit dem Wert und da hatte es gepasst.... wenn ich jetzt aber auf den Wert reagieren möchte, dann geht nichts mehr ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 12:11 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
also ich habe jetzt eine Lösung, die zumindest bei mir annähernd "gut" funktioniert:
Code: Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged Dim myFont As New System.Drawing.Font(TextBox1.Font.Name, TextBox1.Font.Size) Dim textSize As System.Drawing.Size = TextRenderer.MeasureText(TextBox1.Text, myFont) Dim int As Integer = 1 If textSize.Width >= TextBox1.Width * 2 - 10 Then int = int + 1 End If If int >= 2 Then MsgBox("Max") TextBox1.MaxLength = TextBox1.TextLength - 2 Else : TextBox1.MaxLength = 800 End If End Sub
Die "10" steuern, wie weit vorher die Zeile endet
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 12:40 <-- editieren / zitieren --> Unities abgeben:
Okay ich nicht ganz deine Lösung aber ich hab jetzt selber eine gefunden.... Line0 = "" Line1 = "" Line0 = txtRevÄn.Text Line0Neu = Line0 Dim myFont As New System.Drawing.Font(txtRevÄn.Font.Name, txtRevÄn.Font.Size) Dim Sizeline0Neu As System.Drawing.Size Dim Sizeline1Neu As System.Drawing.Size Sizeline0Neu = TextRenderer.MeasureText(Line0Neu, myFont) Do Until Sizeline0Neu.Width < 190 Line0Neu = Mid(Line0, 1, InStrRev(Line0, " ") - 1) Line1 = Mid(Line0, InStrRev(Line0, " ") + 1) & " " & Line1 Line0 = Line0Neu Sizeline0Neu = TextRenderer.MeasureText(Line0Neu, myFont) Loop Line1Neu = Line1 Sizeline1Neu = TextRenderer.MeasureText(Line1Neu, myFont) Do Until Sizeline1Neu.Width < 190 Line1Neu = Mid(Line1, 1, InStrRev(Line1, " ") - 1) Line2 = Mid(Line1, InStrRev(Line1, " ") + 1) & " " & Line2 Line1 = Line1Neu Sizeline1Neu = TextRenderer.MeasureText(Line1Neu, myFont) Loop MsgBox(Len(Line0Neu) & vbCrLf & Len(Line1Neu) & vbCrLf & Len(Line2))
und jetzt kann ich abfragen ob die line2 (3.Zeile) leer ist, wenn ja alles super wenn nein gibt gemeckertes. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Mai. 2015 12:52 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 08. Mai. 2015 13:14 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|