Autor Beitrag
Coja
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Fr 22.10.10 19:31 
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.
ausblenden volle Höhe 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;     // Höhe des Panels
        int HorScroll;      // Position der horizontalen Bildlaufleiste
        int VerScroll;      // Position der vertikalen Bildlaufleiste
        int VerPixZuMeter;  // Verhältnis von Pixel/Meter
        
        public Form1()
        {
            InitializeComponent();
            PunkteListe = new BindingList<NeuPoint>(); // Init. für Liste
      
            dataGridView1.DataSource = PunkteListe;
            
        }
//...
  public class NeuPoint // Anstelle von Point verwenden
        {
            public int NeuX { get; set; }
            public int NeuY { get; set; }
            // Klasse NeuPoint liefert 2 Integerwerte und kein Struct wie Point
            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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 30

Win Vista, Win 7
C#, VB, ASP.NET (VS 2010 Express)
BeitragVerfasst: Fr 22.10.10 21:02 
user profile iconCoja hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
Einloggen, um Attachments anzusehen!