Marker löschen

Die in der Achse liegenden Marker können mit der Methode RemoveMember wieder entfernt werden. In diesem Beispiel wird der Marker gelöscht, welcher in dem DataGrid aktuell selektiert wird. Hierzu wird zunächstl der Marker aus der Achse gelöscht, danach wird die Zeile aus der Tabelle heraus gelöscht.

private void btnDeleteXMarker_Click(object sender, EventArgs e)
{
    try
    {
        MarkerContainer ia = axisGroup.SubMember.OfType<MarkerContainer>().First();
        ia.RemoveMember(ia.SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical).ToArray()[dataGridView1.SelectedCells[0].RowIndex]);
        dataGridView1.Rows.RemoveAt(dataGridView1.SelectedCells[0].RowIndex);
    }
    catch (Exception) { }
}

private void btnDeleteYMarker_Click(object sender, EventArgs e)
{
    try
    {
        MarkerContainer va = axisGroup.SubMember.OfType<MarkerContainer>().First();
        va.RemoveMember(va.SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal).ToArray()[dataGridView2.SelectedCells[0].RowIndex]);
        dataGridView2.Rows.RemoveAt(dataGridView2.SelectedCells[0].RowIndex);
    }
    catch (Exception) { }
}

Die Selektierung im DataGridView lässt sich auch durch einen Klick auf die Marker im Chart steuern.

Hierfür wird ein EventHandler auf das Event member_Clicked von dem ChartPanel oder ScopeProjectPanel angemeldet. Dort wird das selektierte Model übergeben, sodass dieses weiter benutzt werden kann.

In dem Beispiel wird der passende Index gesucht um die Zeile im Grid zu selektieren.

private void ChartPanel_Member_Clicked(object sender, TwinCAT.Measurement.ProjectBase.MeasurementMemberBase e)
{
    foreach(AxisGroup ag in chartPanel.ModelChart.SubMember.OfType<AxisGroup>())
    {
        foreach(MarkerContainer mc in ag.SubMember.OfType<MarkerContainer>())
        {
            if (mc.SubMember.Contains(e))
            {
                switch (((Marker)e).Orientation)
                {
                    case TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical:
                        dataGridView1.ClearSelection();
                        dataGridView1[1, mc.SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical).ToList().IndexOf(e as Marker)].Selected = true;
                        break;
                    case TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal:
                        dataGridView2.ClearSelection();
                        dataGridView2[0, mc.SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal).ToList().IndexOf(e as Marker)].Selected = true;
                        break;
                    default:
                        break;
                }
            }
        }
    }
}