| |
VB.NET - Ein- und Umsteigertxt Daten in Listview | | | Autor: Sebi90 | Datum: 11.03.16 21:46 |
| Hallo,
ich lade mir solch ein Datei in eine Textbox:
http://www.xup.in/dl,12696440/001030777965L.Txt/
Meine Listview hat 7 Spalten, die ich gerne mit den txt Daten füllen würde:
Index,Durchmesser,XSoll,YSoll,TiefeSoll,Aggregat,Werkzeugnummer
Leider bekomme ich es nach 3 Tagen immer noch nicht gebacken nur irgendeinen Wert in der Listview anzuzeigen.
Hat jemand ein paar Zeilen für mich ?
MfG Sebi 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 11.03.16 23:11 |
| Hallo!
Wo genau liegt das Problem?
Daten lesen, Elemente auf ListView-Subitems zuweisen?
Anwendungsbeispiel:
Public Class frmListViewDemo
Dim lv As New ListView With _
{.Parent = Me, .Width = 400, .Height = 400, .View = View.Details}
Private Sub frmListViewDemo_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'Spalten erstellen
With lv.Columns
.Add("Index", 100)
.Add("Durchmesser", 100)
.Add("XSoll", 100)
'............
End With
Dim fo As New Font("Arial", 10)
'Item erstellen
Dim lvi As ListViewItem = lv.Items.Add("1")
lvi.UseItemStyleForSubItems = False
With lvi.SubItems
'Subitems füllen
.Add("Durchmesser = 10.5", Color.Blue, Color.White, fo)
.Add("XSOLL = 12", Color.Black, Color.LightGray, fo)
'.............
End With
lvi = lv.Items.Add("2")
With lvi.SubItems
.Add("Durchmesser = 20.7", Color.Blue, Color.White, fo)
.Add("XSOLL = 18", Color.Black, Color.LightGray, fo)
'...............
End With
'...................
End Sub
End Class
Beitrag wurde zuletzt am 11.03.16 um 23:22:26 editiert. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 12.03.16 13:14 |
| Hallo,
so sieht meine Oberfläche aus:
und hier mein Code
Imports System.IO
Public Class Form1
Private pfad As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Me.ListView1.View = System.Windows.Forms.View.Details
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK _
Then
pfad = OpenFileDialog1.FileName
TextBox1.Text = String.Empty
Try
TextBox5.Text = File.ReadAllText(pfad)
Catch
End Try
' Dateipfad in der Titelleiste des Formulars anzeigen:
Me.Text = pfad
End If
End Sub
End Class Ich bekomme den Inhalt der txt Datei in die Textbox, aber zur besseren Übersicht hätte ich die einzelne Werte gerne in der Listview.
Ich weis nicht, wie ich die Listview befüllen soll, das er sich die einzelnen Werte aus der txt Datei holt.
MfG 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 12.03.16 14:52 |
| Datenbindung mit DataTable und DataGridView wäre eventuell
zu bevorzugen.
Public Class frmListViewDemo
Dim lv As New ListView With _
{.Parent = Me, .Width = 400, .Height = 400, .View = View.Details}
Private Sub frmListViewDemo_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Dim col() As String = _
{"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", "TiefeSoll", _
"Aggregat", "Werkzeugnummer"}
For i As Integer = 0 To col.Length - 1
lv.Columns.Add(col(i))
Next i
Dim lines() As String = _
IO.File.ReadAllLines("C:\downloads\001030777965L.txt")
Dim lvi As ListViewItem
For i As Integer = 0 To lines.Count - 1
Dim parts() As String = lines(i).Split("="c)
If lines(i).Trim.StartsWith(col(0)) Then
lvi = lv.Items.Add(parts(1))
For k As Integer = 1 To col.Length - 1
lvi.SubItems.Add("")
Next
End If
Dim id As Integer = Array.IndexOf(col, parts(0))
If lvi IsNot Nothing AndAlso id > 0 Then
lvi.SubItems(id).Text = parts(1)
End If
Next i
End Sub
End Class
Beitrag wurde zuletzt am 12.03.16 um 14:57:39 editiert. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 12.03.16 20:42 |
| Hallo Manfred,
dank für deine Hilfe. Ich sehe das das ganze wunderbar funktioniert.
Leider bekomme ich es mit dem Openfile.Dialog nicht hin.
Du hast ja einen festen Dateipfad eingebaut.
Desweiteren würde ich noch gerne die Länge und die Breite (nur den Zahlenwert) in zwei Textboxen eintragen.
mit string.Split(vvNewLine) bekomme ich die ganze Linie in die Textbox. Aber wie kann ich den Text noch wegschneiden ?
Hier nochmal mein Code. Nach x Jahren ohne Laptop ist bei mir leider fast alles weg
Imports System.IO
Public Class Form1
Private pfad As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Me.ListView1.View = System.Windows.Forms.View.Details
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK _
Then
pfad = OpenFileDialog1.FileName
Try
TextBox5.Text = File.ReadAllText(pfad)
Catch
End Try
End If
Label5.Text = SearchtextCount( _
TextBox5.Text, searchtext).ToString & " Bohrungen vorhanden"
Dim TestString As String = TextBox5.Text
Dim Teile() As String = TestString.Split(vbNewLine)
TextBox1.Text = (Teile(0))
TextBox2.Text = (Teile(1))
TextBox3.Text = (Teile(2))
TextBox4.Text = (Teile(3))
End Sub
Dim searchtext As String = "Bearbeitungsindex"
Private Sub Button2_Click(sender As Object, e As EventArgs)
Label5.Text = SearchtextCount( _
TextBox5.Text, searchtext).ToString & " Bohrungen vorhanden"
End Sub
Function SearchtextCount(ByVal txt As String, ByVal searchtext As String) _
As Int32
Return System.Text.RegularExpressions.Regex.Matches(txt, _
searchtext).Count()
End Function
End Class MfG 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 12.03.16 21:24 |
| Das geht nach dem gleichen Prinzip wie oben gezeigt.
Seien "tboLänge" und "tboBreite" zwei Textboxen
und "OpenFileDialog1" eine Instanz des OpenFileDialogs ...
With openfiledialog1
.InitialDirectory = "C:\daten"
.CheckFileExists = True
.Filter = "Datendatei |*.txt"
If .ShowDialog = _
Windows.Forms.DialogResult.Cancel Then Exit Sub
'Zeilen der gewählten Datei lesen
Dim flines() As String = IO.File.ReadAllLines(.FileName)
'Zeilen durchlaufen
For i As Integer = 0 To flines.Count - 1
'Zeile zerlegen
Dim parts() As String = flines(i).Split("="c)
If parts(0) = "Breite" Then tboBreite.Text = parts(1)
If parts(0) = "Laenge" Then tboLänge.Text = parts(1)
Next i
End With Oder so ....
Dim ind As Integer = _
Array.FindIndex(flines, Function(x As String) x.StartsWith("Laenge"))
Beitrag wurde zuletzt am 12.03.16 um 21:37:23 editiert. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 12.03.16 22:26 |
| Warum legst du so Einstellungen wie die Größe der ListView im Quelltext fest ?
Hat das Vorteile ? Oder ist das nur eine Stil der Programmierung ?
Ich finde es viel komfortabler die Werte im Eigenschaftsfenster festzulgen. 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 12.03.16 22:34 |
| Damit die Code-Beispiele (Formulare) direkt ausführbar sind -
ohne daß ich erst erklären muß, welche Controls mit welchen
Einstellungen benötigt werden. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 12.03.16 23:16 |
| Ok, und hier nochmal das ganze
Public Class Form1
Dim lv As New ListView With _
{.Parent = Me, .Width = 441, .Height = 700, .Top = 40, .View = _
View.Details}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
Dim col() As String = _
{"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", "TiefeSoll", _
"Aggregat", "Werkzeugnummer"}
For i As Integer = 0 To col.Length - 1
lv.Columns.Add(col(i))
Next i
With OpenFileDialog1
.InitialDirectory = "C:\txt"
.CheckFileExists = True
.Filter = "Datendatei |*.txt"
End With
If OpenFileDialog1.ShowDialog = _
Windows.Forms.DialogResult.Cancel Then Exit Sub
'Zeilen der gewählten Datei lesen
Dim flines() As String = IO.File.ReadAllLines(OpenFileDialog1.FileName)
Dim lvi As ListViewItem
For i As Integer = 0 To flines.Count - 1
Dim parts() As String = flines(i).Split("="c)
If flines(i).Trim.StartsWith(col(0)) Then
lvi = lv.Items.Add(parts(1))
For k As Integer = 1 To col.Length - 1
lvi.SubItems.Add("")
Next
End If
Dim id As Integer = Array.IndexOf(col, parts(0))
If lvi IsNot Nothing AndAlso id > 0 Then
lvi.SubItems(id).Text = parts(1)
End If
Next i
For i As Integer = 0 To flines.Count - 1
Dim Parts() As String = flines(i).Split("="c)
If Parts(0) = "Breite" Then tbob.Text = Parts(1)
If Parts(0) = "Laenge" Then tbol.Text = Parts(1)
Next
End Sub
End Class Mir ist nur aufgefallen, sobald ich eine 2 Datei lade, wird alles drangehängt.
Wie kann ich die Listvie beim erneuten laden leeren ?
Gute Nacht ? 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 12.03.16 23:52 |
| Nein, das ist nicht das Ganze.
Da Du den Designer zur Gestaltung des Formulars verwendest,
steht der Code zur Deklaration und zur Festlegung der Eigenschaften
der Controls in der Designer-verwalteten Datei.
Diese Deklaration der Spalten gehört in das "Form_Load"-Event,
falls die Spalten sich beim Laden einer Datei nicht ändern.
Dim col() As String 'formular-weit gültige Deklaration
Private Sub frmListViewDemo_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
col =
{"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", _
"TiefeSoll", "Aggregat", "Werkzeugnummer"}
For i As Integer = 0 To col.Length - 1
lv.Columns.Add(col(i))
If i > 0 Then
lv.Columns(i).TextAlign = HorizontalAlignment.Right
End If
Next i
End Sub Um die Items (nicht die Spalten) in einem Listview zu löschen,
steht die "Clear"-Methode der Items-Auflistung zur Verfügung.
Sie ist vor dem Füllen der Liste auszuführen (vor der flines-Schleife).
Die zweite Schleife ist unnötig.
lv.Items.Clear()
Dim lvi As ListViewItem = Nothing
For i As Integer = 0 To flines.Count - 1
Dim parts() As String = flines(i).Split("="c)
If flines(i).Trim.StartsWith(col(0)) Then
lvi = lv.Items.Add(parts(1))
For k As Integer = 1 To col.Length - 1
lvi.SubItems.Add("")
Next k
End If
Dim id As Integer = Array.IndexOf(col, parts(0))
If lvi IsNot Nothing AndAlso id > 0 Then
lvi.SubItems(id).Text = parts(1)
End If
If parts(0) = "Breite" Then tboB.Text = parts(1)
If parts(0) = "Laenge" Then tboL.Text = parts(1)
Next i
Beitrag wurde zuletzt am 12.03.16 um 23:55:08 editiert. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 13.03.16 12:01 |
| Ein paar Codesnipsel von mir funktionieren zugar
Die meisten leider nicht
Würde noch gerne das Erstellungsdatum der geladenen Datei in ein Label schreiben.
Label5.Text = (New IO.FileInfo(OpenFileDialog1.FileName).CreationTime.ToString) es wird zwar ein Datum geladen, aber nicht das von der ausgewählten Datei
und mit PrintPreviewDialog1.ShowDialog() öffnet die Druckvorschau
Aber mit Hinweis, Das Dokument enthält keine Seiten.
Würde gerne Länge und Breite, ListView ausdrucken können.
Manfred, wie kann man dir was guten tun für deine Geduld ?
Gruß 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 13.03.16 14:02 |
| Hallo!
Warum Du die falsche Zeit erhälst, kann ich nicht beurteilen.
Steht in Openfiledialog1.filename nicht der richtige Pfad?
Der Ausdruck muß ggf. per Code gestaltet werden.
Hier eine vereinfachte Version des PrintPage-Eventhandlers.
Annahme: Die Spalten passen in eine Seitenbreite
(abhängig von Seiteneinstellung, Printfont, Spaltenbreite)
Sei "lv" das gefüllte Listview-Control,
"pd" einen PrintDocument-Instanz (System.Drawing.Printing)
und die "pd.Print"-Methode werde gerufen ....
Private Sub pd_PrintPage(sender As System.Object, _
e As System.Drawing.Printing.PrintPageEventArgs) _
Handles pd.PrintPage
Static itemindex As Integer = 0 'fortlaufender lv-ItemIndex
Dim pf As New Font("Arial", 6) 'Druckfont
Dim linesperpage As Integer = _
CInt(e.MarginBounds.Height / pf.GetHeight(e.Graphics)) - 1
Dim fw As Integer = 80 'Spaltenbreite
Dim lineindex As Integer = 0
Dim ypos As Integer = e.MarginBounds.Top
With e.Graphics
Using br As New SolidBrush(Color.Black)
'LV-Überschrift: Spaltenbezeichner
For i As Integer = 0 To lv.Columns.Count - 1
.DrawString(lv.Columns(i).Text, pf, br, _
e.MarginBounds.Left + i * fw, ypos)
Next i
'LV-Items in die aktuelle Druckseite eintragen
While itemindex < lv.Items.Count And _
lineindex < linesperpage
ypos += CInt(pf.GetHeight(e.Graphics))
For i As Integer = 0 To lv.Columns.Count - 1
'auszugebender Text im Feld
Dim text As String = _
lv.Items(itemindex).SubItems(i).Text
'ggf. Formatierung der Nachkomma-Stellen
If i = 2 Or i = 3 Then
text = Microsoft.VisualBasic.Format(CDbl(text), "0.0")
End If
Dim tl As Integer = 0
'Text im Feld rechtsbündig ausrichten
While tl < fw - 5
text = " " & text
tl = CInt(.MeasureString(text, pf).Width)
End While
.DrawString(text, pf, br, _
e.MarginBounds.Left + i * fw, ypos)
Next i
itemindex += 1
lineindex += 1
End While
e.HasMorePages = itemindex < lv.Items.Count
End Using
End With
End Sub
Beitrag wurde zuletzt am 13.03.16 um 14:20:42 editiert. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 21.03.16 19:27 |
| Manfred, ich bin immer noch begeistert.
Leider verstehe ich nicht alles zu 100 Prozent, aber es funktioniert.
Wie komplex wäre es, sowas in einer picture.box zu visualisieren ?
Gruß 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 21.03.16 21:02 |
| Und wofür brauchst Du das?
Du hast die Daten in einem Listview-Control
und für die Voransicht des Drucks gibt es den
PrintPreview-Dialog. | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 21.03.16 21:11 |
| Hallo,
ich meine nicht den text in die picture.box, sondern die Daten
Durchmesser auf x und y position darzustellen.
Und wofür brauch ich das ganze....
ich glaube das die grafische Darstellung, das ganze zur Überprüfung meiner Daten sehr erleichtern würde.
Wenn manche Daten (punkte) nicht in einer Linie wären, würde es sofort auffallen
Die werte liegen alle bei x790,2. Wäre hier etwas in der Visualisierung versetzt würde man es gleich sehen.
MfG 0
Beitrag wurde zuletzt am 21.03.16 um 21:18:16 editiert. | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 21.03.16 22:25 |
| Vielleicht so was ....
Public Class frmListViewDemo2
'Panel mit Scrollbalken
Dim pl As New Panel With _
{.Parent = Me, .Width = 400, .Height = 400, _
.AutoScroll = True}
'Picturebox für die Anzeige
Dim pbox As New PictureBox With _
{.Parent = pl, _
.SizeMode = PictureBoxSizeMode.AutoSize}
Dim col() As String 'Spaltenüberschriften
Dim bmp As Bitmap 'Bitmap für Datenaufbereitung
Private Sub frmListViewDemo2_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.ClientSize = pl.Size
col =
{"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", _
"TiefeSoll", "Aggregat", "Werkzeugnummer"}
'Zeilen lesen
Dim lines() As String = _
IO.File.ReadAllLines("C:\daten\001030777965L.txt")
Dim fields As New List(Of String)
'Zahl der Ausgabezeilen ermitteln
Dim linecounter As Integer
For l As Integer = 0 To lines.Count - 1
If lines(l).Trim.StartsWith(col(0)) Then linecounter += 1
Next l
Dim fo As New Font("Arial", 10) 'Font der Ausgabe
Dim fieldwidth As Integer = 80 'Feldgröße (an Font anzupassen)
Dim fieldheight As Integer = 15
Dim margin As Integer = 20 'Randbreite
'Ausgabe-Bitmap erstellen
Dim bmp_width As Integer = _
fieldwidth * col.Length + 2 * margin
Dim bmp_height As Integer = _
fieldheight * (linecounter + 1) + 2 * margin
bmp = New Bitmap(bmp_width, bmp_height)
linecounter = 0
Dim text As String
'Texte in die Bitmap eintragen
Using g As Graphics = Graphics.FromImage(bmp), _
b As New SolidBrush(Color.Black)
'Hintergrundfarbe
g.Clear(Color.White)
'Überschriften ausgeben
For i As Integer = 0 To col.Length - 1
text = AdjustLength(g, fo, col(i), fieldwidth)
g.DrawString(text, fo, b, _
New Point(margin + i * fieldwidth, margin))
Next i
For l As Integer = 0 To lines.Count - 1
Dim parts() As String = lines(l).Split("="c)
If lines(l).Trim.StartsWith(col(0)) Then
For k As Integer = 0 To col.Length - 1
fields.Add("")
Next k
End If
Dim id As Integer = Array.IndexOf(col, parts(0))
If id >= 0 AndAlso fields.Count > id Then
fields(id) = parts(1)
'Ausgabe-Zeile vollständig aufbereitet ?
Dim ok As Boolean = True
For i As Integer = 0 To fields.Count - 1
If fields(i) = "" Then ok = False
Next i
If ok Then
'Felder in einer Zeile ausgeben
linecounter += 1
For i As Integer = 0 To fields.Count - 1
text = AdjustLength(g, fo, fields(i), fieldwidth)
g.DrawString(text, fo, b, _
New Point(margin + i * fieldwidth, _
margin + linecounter * fieldheight))
Next i
fields.Clear()
End If
End If
Next l
End Using
pbox.Image = bmp 'Bitmap anzeigen
End Sub
Private Function AdjustLength(g As Graphics, fo As Font, _
text As String, length As Integer) As String
Dim l As Integer = text.Length + 1
Do
l -= 1
text = text.Substring(0, l)
Loop While g.MeasureString(text, fo).Width > length
While g.MeasureString(text, fo).Width < length
text = " " & text
End While
Return text
End Function
End Class | |
Re: txt Daten in Listview | | | Autor: Sebi90 | Datum: 22.03.16 03:25 |
| Hallo,
funktioniert wie immer einwandfrei. Aber ich glaube wir haben uns Missverstanden
Hier ein Beispiel:
Das die ermittelten Werte grafisch dargestellt werden.
Somit könnte man einen "Ausreiser" falschen Wert sehr leicht erkennen 0 | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 22.03.16 11:49 |
| Dafür gibt es viele Beispiele.
Das MS-Chart-Control bietet diverse Visualisierungsmöglichkeiten für Datenreihen.
Hier ein anderes Beispiel.
Beitrag wurde zuletzt am 22.03.16 um 11:50:01 editiert. | |
Visualisierung ListView-Spalte durch Chart (RELOADED) | | | Autor: Manfred X | Datum: 02.04.16 20:02 |
| Im Projekt ist ein Net-Verweis auf die Bibliothek
"System.Windows.Forms.DataVisualization" erforderlich.
Erstellung eines ChartControl auf der Form:
Dim ch As New System.Windows.Forms.DataVisualization.Charting.Chart _
With {.Parent = Me, .Height = 400, .Width = 400} Sei "lv" die gefüllte Listview aus dem obigen Beispiel:
(Übergabe der Headline der darzustellenden Spalte als Parameter)
Private Sub CreateChart(ByVal Columnname As String)
'Datatable für Spaltendaten
Dim dt As New DataTable
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add(Columnname, GetType(Double))
'Ermittlung des Spaltenindex
Dim columnindex As Integer = -1
For i As Integer = 0 To lv.Columns.Count - 1
If lv.Columns(i).Text.ToLower = Columnname.ToLower Then _
columnindex = i
Next i
If columnindex = -1 Then Exit Sub
'Übertragung der Listview-Spalte in die Table
For i As Integer = 0 To lv.Items.Count - 1
dt.Rows.Add _
({i + 1, CDbl(lv.Items(i).SubItems(columnindex).Text)})
Next i
With ch
.DataSource = dt
.Titles.Clear()
.Titles.Add(Columnname)
.ChartAreas.Clear()
.ChartAreas.Add("Base")
With .ChartAreas(0)
.AxisX.MajorGrid.LineDashStyle = _
DataVisualization.Charting.ChartDashStyle.Dot
.AxisY.MajorGrid.LineDashStyle = _
DataVisualization.Charting.ChartDashStyle.Dash
End With
With .Series
.Clear()
.Add(Columnname)
End With
With .Series(0)
.ChartArea = "Base"
'Datenbindung an Datatable
.XValueMember = dt.Columns(0).ColumnName
.YValueMembers = dt.Columns(1).ColumnName
.ChartType = DataVisualization.Charting.SeriesChartType.Point
.Palette = DataVisualization.Charting.ChartColorPalette.Grayscale
End With
End With
End Sub
Beitrag wurde zuletzt am 02.04.16 um 20:03:31 editiert. | |
Re: txt Daten in Listview | | | Autor: Ingo80 | Datum: 19.04.16 16:22 |
| Hallo Forum,
ich habe mich extra wegen diesen Threads angemeldet. Finde ihn hochspannend, weil ich mich gerade mit etwas ähnlichem beschäftige.
ManfredX schreibt das daß http://www.vbarchiv.net/tipps/details.php?id=1869 eine Möglichkeit wäre.
Könnte vielleicht jemand das genannte Beispiel anpassen. Vielleicht wird es dann ein bisschen deutlicher.
Euer Ingo | |
Re: txt Daten in Listview | | | Autor: Ingo80 | Datum: 20.04.16 11:43 |
| Hallo,
habe das ganz jetzt mal so gelöst:
Label17.Text = tbol.Text / xr
Dim q As String = Label17.Text
Dim g As Graphics = GroupBox1.CreateGraphics()
For i = 0 To lv.Items.Count - 1
Dim d, r, t As Integer
d = lv.Items(i).SubItems(1).Text / q
r = (x1 - (d / 2)) + lv.Items(i).SubItems(2).Text / q
t = y1 + lv.Items(i).SubItems(3).Text / q
g.DrawEllipse(Pens.Black, r, t, d, d)
Next Wobei q der Verkleinerungsfaktor ist.
Würde noch gerne die aktuell ausgewählte Zeile der Listview in einer anderen Farbe darstellen.
Mit welcher Eingenschaft funktioniert das ? | |
Re: txt Daten in Listview | | | Autor: Marty** | Datum: 20.07.16 21:24 |
| Hallo,
wie kann man den Inhalt einer Listview wieder in ein Txt Datei speichern ? | |
Re: txt Daten in Listview | | | Autor: Manfred X | Datum: 20.07.16 22:01 |
| Hallo!
Textdateien sind geeignet für Texte.
In einem Listview-Control steht eine Liste, deren
Items ggf. durch Subitems untergliedert sind.
Es wäre zu klären, wie (Formatierung) diese Struktur
in der Datei gespeichert werden soll (Weiterverarbeitung)?
CSV, INI, XML, Custom ...
Für solche Zwecke gibt es - je nach Zielsetzung - geeignetere
Instrumente. | |
Re: txt Daten in Listview | | | Autor: Marty** | Datum: 21.07.16 05:03 |
| Hallo,
csv schwein wohl wirklich die bessere Lösung zu sein.
Leider habe ich auch keine Ahnung wie man den Inhalt in einer csv speichert .... | |
Listview-Items in CSV-Datei eintragen | | | Autor: Manfred X | Datum: 21.07.16 07:52 |
| So oder ähnlich ....
''' <summary>String-Einträge im Listview in CSV-Datei schreiben</summary>
''' <param name="lv">Listview-Control</param>
''' <param name="filename">Pfad und Name der Ausgabedatei</param>
''' <param name="AllowOverwrite">Darf die Ausgabedatei ggf. überschrieben
' werden</param>
''' <returns>Alles OK?</returns>
Private Function ListViewToCsv(ByVal lv As ListView, ByVal filename As String, _
Optional ByVal AllowOverwrite As Boolean = False) As Boolean
Const tz As Char = ";"c 'Feld-Trennzeichen
Const rp As Char = ","c 'Ersatzzeichen
If lv Is Nothing OrElse lv.Items.Count = 0 Then Return Nothing
Try
filename = _
IO.Path.ChangeExtension(filename, ".csv") 'Extension sicherstellen
If IO.File.Exists(filename) Then
If AllowOverwrite = False Then
Return False
Else
IO.File.Delete(filename)
End If
End If
Using sw As New IO.StreamWriter(filename) 'Ausgabestream
'Maximale Anzahl von Subitems im Listview bestimmen
Dim sic As Integer = 0
For i As Integer = 0 To lv.Items.Count - 1
sic = Math.Max(lv.Items(i).SubItems.Count, sic)
Next i
Dim line As New System.Text.StringBuilder 'Ausgabezeile, Item
'Itemschleife
For i As Integer = 0 To lv.Items.Count - 1
line.Clear()
'Item und ggf. Subitems
For si As Integer = 0 To lv.Items(i).SubItems.Count - 1
line.Append(lv.Items(i).SubItems(si).Text.Replace(tz, rp))
line.Append(tz)
Next si
For si As Integer = lv.Items(i).SubItems.Count To sic - 1
line.Append(tz) 'ggf. Zeile mit Leerfeldern auffüllen
Next si
'sw.WriteLine(line.ToString.TrimEnd(tz)) 'Zeile schreiben
sw.WriteLine(line.ToString)
Next i
End Using
'Alles OK
Return True
Catch
'OOOPs
Return False
End Try
End Function
Beitrag wurde zuletzt am 21.07.16 um 08:03:36 editiert. | |
Re: txt Daten in DataGrid einlesen | | | Autor: Sebi90 | Datum: 26.04.17 20:39 |
| Hallo Forum,
nachdem die Lösung mit der Listview jetzt über ein Jahr sehr gut funktioniert hat, bin ich jetzt wieder hier.
Anscheinend hat die Listview zu wenig Möglichkeiten.
Würde gerne die ursprüngliche Datei http://www.xup.in/dl,12696440/001030777965L.Txt/
in eine DataGrid einlesen, und die Parameter "{"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", "TiefeSoll", "Aggregat", "Werkzeugnummer"} eintragen.
Könnte mir hier bitte nochmal jemand ein Beispiel geben ?
Schöne Grüße | |
Beispiel für schlampiges Programmieren | | | Autor: Manfred X | Datum: 27.04.17 07:25 |
| Wo liegt dabei das Problem .... ????
Public Class frmFillGrid
Dim dgv As New DataGridView With {.Parent = Me}
Private Sub frmFillGrid_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Dim lines() As String = _
IO.File.ReadAllLines("C:\Daten\001030777965L (2).txt")
Dim dt As New DataTable
Dim i As Integer
'Spalten erstellen
For i = 0 To lines.Length - 1
If lines(i).ToUpper.StartsWith("BEARBEITUNGSINDEX") Then
dt.Columns.Add(lines(i).ToUpper.Split("="c)(0))
For k As Integer = 1 To 16
dt.Columns.Add(lines(k + i).ToUpper.Split("="c)(0))
Next k
Exit For
End If
Next i
'Zeilen füllen
Try
i = 0
Do
If lines(i).ToUpper.StartsWith("BEARBEITUNGSINDEX") Then
Dim r As DataRow = dt.NewRow
r(0) = lines(i).ToUpper.Split("="c)(1)
For k As Integer = 1 To 16
i += 1
r(k) = lines(i).ToUpper.Split("="c)(1)
Next k
dt.Rows.Add(r)
End If
i += 1
Loop While i < lines.Count
Catch
Stop
End Try
dgv.DataSource = dt
End Sub
End Class Warnung:
- keine angepaßten Datentypen (für Tabellen-Spalten),
- keine Sicherheitsabfragen (z.B. für Schleifenindices, Aufbau gelesener Sätze),
- Code für allgemeine Zwecke nicht verwendbar (z.B. keine Steuerung durch Parameter)
Beitrag wurde zuletzt am 27.04.17 um 07:33:20 editiert. | |
Re: Beispiel für schlampiges Programmieren | | | Autor: Manfred X | Datum: 27.04.17 16:21 |
| Hmmm!
Ich erstelle eigentlich stets Columns.
So auch dieses Mal .....
Ich gestehe, der Tabelle weder einen Namen noch eine
Primärschlüssel-Spalte zugeordnet zu haben.
Ich möchte mir aber erlauben, darauf hinweisen zu dürfen,
daß ich immerhin keine Daten in ein Datagrid geschrieben habe.
Schlimmer geht immer .... | |
Re: txt Daten in DataGrid einlesen | | | Autor: Sebi90 | Datum: 29.04.17 16:23 |
| Hallo,
auch wenn ihr das ganze als schlampig bezeichnet, ich bin froh das es funktioniert.
Könnte mir noch jemand ein zweigen, wenn ich nur wieder die Werte
"Bearbeitungsindex", "Durchmesser", "XSoll", "YSoll", "TiefeSoll", "Aggregat", "Werkzeugnummer", "Art"
haben will.
Kannn man auch per Code, die einzelnen breiten der Spalten festlegen ?
Gruß | |
Re: txt Daten in DataGrid einlesen | | | Autor: Manfred X | Datum: 29.04.17 18:27 |
| Erstellte und gefüllte Datatable-Spalten kannst Du nach dem Lesen
einfach mit der Remove-/RemoveAt-Methode der Columns-Auflistung der
Datatable entfernen:
dt.Columns.RemoveAt(2) --> entfernt die dritte Spalte
Die übrigen Spaltenindices ab 3 verschieben sich entsprechend nach vorne.
besser: dt.columns.remove("Typ") entfernt die Spalte "Typ"
Das Erscheinungsbild von Zellen wird durch Eigenschaften des Display-Controls
festgelegt.
Sei "dgv" ein Win.Forms.Datagridview:
dgv.DataSource = dt
dgv.Columns(0).Width = 200 'Breite der Spalte 0
'andere Parameter für die "Erscheinung" der Spalte
können im "DefaultCellstyle" festgelegt werden
dgv.Columns(0).DefaultCellStyle.BackColor = Color.LightGray Man kann unerwünschte Spalten im Grid auch Visible = false setzen.
Die Daten in der Datatable bleiben dabei erhalten. | |
Re: txt Daten in DataGrid einlesen | | | Autor: Sebi90 | Datum: 30.04.17 20:39 |
| Hallo,
mittlerweile finde ich es Klasse, das alle Daten im Datengrid sind.
Ich habe mir im Menüstrip einen Punkt Filter angelegt, über den ich mir jede Spalte ausblenden kann.
Die ausgewählten Spalten werden über My.Setting gespeichert.
Private Sub BearbeitungsindexToolStripMenuItem_Click(sender As Object, e As _
EventArgs) Handles BearbeitungsindexToolStripMenuItem.Click
My.Settings.Bearbeitungsindex = _
BearbeitungsindexToolStripMenuItem.Checked
My.Settings.Save()
My.Settings.Reload()
If BearbeitungsindexToolStripMenuItem.Checked Then
dgv.Columns(0).Visible = True
Else
dgv.Columns(0).Visible = False
End If
End Sub Nun habe ich das Problem das beim öffnen der Datei alle Spalten angezeigt werden. Hätte aber gerne nur die ausgewählten Spalte. Hat jemand eine Idee ?
Gruß | |
Re: txt Daten in DataGrid einlesen | | | Autor: Manfred X | Datum: 30.04.17 22:07 |
| Hallo!
Eigenschaftenfenster des Toolstripmenuitems -> ApplicationSettings ->
PropertyBinding öffnen -> In der Liste der Properties "Checked" wählen ->
ein SettingsItem benennen | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|