public PointList(Form owner, Graph graph)
            : base(owner)
        {
            InitializeComponent();

            _graph = graph;

            graph.ShowIntersectionsChanged += OnShowIntersectionsChanged;
            graph.ShowZerosChanged += OnShowZerosChanged;

            graph.IntersectionsCalculated += OnIntersectionsCalculated;
            graph.ZerosCalculated += OnZerosCalculated;

            _intersectionTab = new TabPage("Intersections");
            _intersectionLv = new ListView
            {
                Font = Font,
                Dock = DockStyle.Fill,
                FullRowSelect = true,
                GridLines = true,
                View = View.Details,
                Columns = { "Intersecting Lines", "X", "Y" },
                HeaderStyle = ColumnHeaderStyle.Nonclickable
            };

            _intersectionLv.Columns[1].TextAlign = HorizontalAlignment.Right;
            _intersectionLv.Columns[2].TextAlign = HorizontalAlignment.Right;

            _intersectionLv.SetDoubleBuffered(true);
            _intersectionLv.ItemSelectionChanged += OnItemSelectionChanged;
            _intersectionTab.Controls.Add(_intersectionLv);

            _zeroTab = new TabPage("Zeros");
            _zeroLv = new ListView
            {
                Font = Font,
                Dock = DockStyle.Fill,
                FullRowSelect = true,
                GridLines = true,
                View = View.Details,
                Columns = { "Line", "X" },
                HeaderStyle = ColumnHeaderStyle.Nonclickable
            };

            _zeroLv.Columns[1].TextAlign = HorizontalAlignment.Right;

            _zeroLv.SetDoubleBuffered(true);
            _zeroLv.ItemSelectionChanged += OnItemSelectionChanged;
            _zeroTab.Controls.Add(_zeroLv);
        }