Entwickler-Ecke
WinForms - BindingList umformen
Coja - Fr 22.10.10 19:31
Titel: BindingList umformen
Hallo,
ich würde gerne die Werte einer BindingList (PointF) als Wert mit Metern angezeigt bekommen.
Das Problem sieht wiefolgt aus:
Ich habe eine 2-spaltige Liste, welche die x- und y-Koordinaten von Punkten anzeigt (diese Werte können sich ändern, also es können neue Werte hinzukommen, gelöscht werden, ...). Die Anzeige und das Änderen erfolgt in einer Datagridview. Zurzeit werden mir noch die aktuellen Zahlen als Float Pixel-Werte von Punkten angezeigt. Ich möchte aber das die Anzeige in Metern erfolgt, wobei 10 Pixel genau einem Meter entsprechen sollen. Die Änderungsfunktionen sollen weiterhin funkionieren nur die Anzeige soll verändert werden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| BindingList<NeuPoint> PunkteListe; int PanelHoehe; int HorScroll; int VerScroll; int VerPixZuMeter; public Form1() { InitializeComponent(); PunkteListe = new BindingList<NeuPoint>(); dataGridView1.DataSource = PunkteListe; } public class NeuPoint { public int NeuX { get; set; } public int NeuY { get; set; } public NeuPoint(int x, int y) { NeuX = x; NeuY = y; } public static explicit operator PointF(NeuPoint Neuobj) { return new PointF(Neuobj.NeuX, Neuobj.NeuY);
} } private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { NeuPoint NP1= new NeuPoint(e.ColumnIndex, e.RowIndex); textBox2.Text = "Spalte: " +NP1.NeuX.ToString()+" Zeile: "+NP1.NeuY.ToString(); panel1.Invalidate(); } |
Um es kurz zu sagen: aus einer zweispaltigen Datagridview sol aus den Werten (x=)235 (y=)343 die Werte (x=)23,5m und (y=)3,43m werden.
Ich freu mich auf eure Antworten,
vg
Coja
Ralf Jansen - Fr 22.10.10 19:37
Verpasse deiner NeuPoint Klasse zwei weitere Properties entsprechend NeuX/NeuY die den errechneten Meter Wert ausgeben und zeige diese im DataGridView an anstatt die bisherigen 2 Properties NeuX/NeuY.
Coja - Fr 22.10.10 20:14
Hmm, das hört sich einfach an, aber wie mach ich das, damit das 'm' auch noch in der datagridview steht, das sollte ja dann eine String-Wert sein...
vg
Coja
Kenpachi - Fr 22.10.10 21:02
Coja hat folgendes geschrieben : |
| aber wie mach ich das, damit das 'm' auch noch in der datagridview steht, das sollte ja dann eine String-Wert sein... |
Als Typ des Properties musst du
string nehmen, das hast du ja selbst schon festgestellt. Und um das 'm' auch mit dabei zu haben musst du im
get'er einfach
NeuX.ToString() + "m" bzw.
NeuY.ToString() + "m" zurück geben. (Sofern NeuX und NeuY die Werte in Meter sind.)
~Kenpachi
Ralf Jansen - Fr 22.10.10 21:18
Wenn du im Grid auch editieren willst sollten die Properties Zahlentypen bleiben in deinem Fall wohl am ehesten Double.
Das 'm' bekommst du über ein Custom Format an die Column. Das Format findest du in den Properties des Grid. Dort einfach mal den Editor für Columns öffnen und dort wiederum den Editor für den CellStyle.
Coja - Sa 23.10.10 18:15
Hallo,
so ich hab das "m" mal hinzugefügt und dann die Werte der Liste durch 10 dividiert...und beim Zeichnen wiederum mit 10 multipliziert. Leider funktionieren jetzt die Funktionen der Binding-List nicht mehr, also Löschen und Editieren...
vg
Coja
Coja - Fr 29.10.10 14:32
Hallo,
leider habe ich das Problem noch nicht behoben. Ich hab mal ein Bild beigefügt. In der Datagridview befinden sich die Werte noch in Pixeln (also wie sie gezeichnet werden). Ich möchte aber die Werte in Meter angezeigt bekommen, also das ganze durch 10 dividiert. Dabei sollen Veränderungen noch möglich sein (also editieren, löschen,...). Hat jemand da einen Tipp für mich (der Code steht oben)
vg
Coja
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!