Page 1 of 1

legend with checkbox style

Posted: Thu Mar 04, 2010 10:36 am
by 13045482
Hi
I have a legend with checkbox style. I am showing 3 series in the chart, so there are 3 legend items with names series1,series2 and series 3. Each has one checkbox with it. If i click on legend item 's checkbox of series1, then by default it dissapears the series 1 curve on the chart. Now I want that If i click on legend item 's checkbox of series1, then lt SHOULD dissapears curves of Series 2 and series3 also along with series 1.

Re: legend with checkbox style

Posted: Thu Mar 04, 2010 10:54 am
by yeray
Hi shikha,

I think you could do something like this:

Code: Select all

		private void InitializeChart()
		{
            tChart1.Aspect.View3D = false;

            for (int i = 0; i < 3; i++)
            {
                new Steema.TeeChart.Styles.Line(tChart1.Chart);
                tChart1[i].FillSampleValues();                
            }

            tChart1.Legend.CheckBoxes = true;            
            tChart1.ClickLegend += new MouseEventHandler(tChart1_ClickLegend);
        }

        void tChart1_ClickLegend(object sender, MouseEventArgs e)
        {
            if (tChart1.Legend.Clicked(e.X, e.Y) == 0)
            {
                tChart1[1].Active = false;
                tChart1[2].Active = false;
            }
        }

Re: legend with checkbox style

Posted: Thu Mar 04, 2010 11:35 am
by 13045482
Great .. just wanted to know what exactly is meaning of this line so that i understand the logic used in code-
if (tChart1.Legend.Clicked(e.X, e.Y) == 0)

and what if i want to do similar thing at clicking of series 2 ie - Now I want that If i click on legend item 's checkbox of series2, then lt SHOULD dissapears curves of Series 1 and series3 also along with series 2.

Re: legend with checkbox style

Posted: Thu Mar 04, 2010 12:53 pm
by yeray
Hi shikha,

As the legend clicked method says, it "Returns the index of the clicked Legend Point". So, when the first item is clicked it returns a "0", when the second item is clicked it returns a "1",...
Are you trying to hide all the series when anyone is hidden?

Code: Select all

        void tChart1_ClickLegend(object sender, MouseEventArgs e)
        {
            int itemClicked = tChart1.Legend.Clicked(e.X, e.Y);
            if (tChart1[itemClicked].Active == false)
            {
                for (int i = 0; i < tChart1.Series.Count; i++)
                {
                    tChart1[i].Active = false;
                }
            }
        }

Re: legend with checkbox style

Posted: Wed Mar 10, 2010 11:29 am
by 13045482
Great..thanks... No i m not trying to hide s series when one is hidden but something similar... I can see that with the code you gave me i can achieve taht BUT when i tried it, there is one issue i am facing..

The issue is-
I have some of the series that i am not showing in legend but i am showing all series in chart.
So the below code does not work ,as if suppose there are total 5 series and 3rd and 4th are hidden in legend (showinlegend=false), and so the legend shows 1,2,5 series in legend. Now if user clicks 5th legend checkbox and goes to the code below- itemClicked will be 3 instead of 5 based on the code logic and so the code will not work. Please give generic code as its not fixed which series will not be shown in legend. Bottomline- I need TChart1.Legend.Clicked(e.X, e.Y)
based on series shown in legend(showinlegend=true). Many thanks!!


Private Sub tChart1_ClickLegend(ByVal sender As Object, ByVal e As MouseEventArgs)
'If tChart1.Legend.Clicked(e.X, e.Y) = 0 Then
' tChart1(1).Active = False
' tChart1(2).Active = False
'End If

Dim itemClicked As Integer = TChart1.Legend.Clicked(e.X, e.Y)



If TChart1(itemClicked).Active = False Then
For i As Integer = 0 To TChart1.Series.Count - 1
TChart1(i).Active = False
Next
End If
End Sub

Re: legend with checkbox style

Posted: Wed Mar 10, 2010 4:40 pm
by yeray
Hi shikha,

So, you have some series shown in legend and some not. And the problem is to identify which one is clicked in the legend because the legend clicked method gives you the index of the clicked item regardless on the total number of series in the chart. Here is how you could do it:

Code: Select all

        private void InitializeChart()
        {
            tChart1.Aspect.View3D = false;

            for (int i = 0; i < 5; i++)
            {
                new Steema.TeeChart.Styles.Line(tChart1.Chart);
                tChart1[i].FillSampleValues();
            }

            tChart1[2].ShowInLegend = false;
            tChart1[3].ShowInLegend = false;

            tChart1.Legend.CheckBoxes = true;
            tChart1.ClickLegend += new MouseEventHandler(tChart1_ClickLegend);
        }

        void tChart1_ClickLegend(object sender, MouseEventArgs e)
        {
            int tmpIndex = -1;
            int ClickedItem = tChart1.Legend.Clicked(e.X, e.Y);
            for (int i = 0; i < tChart1.Series.Count; i++)
            {                
                if (tChart1[i].ShowInLegend) tmpIndex++;
                if (tmpIndex == ClickedItem)
                {
                    tmpIndex = i;
                    break;
                }
            }
            
            MessageBox.Show(tChart1[tmpIndex].Title + " action");           
        }

Re: legend with checkbox style

Posted: Thu Mar 11, 2010 1:07 pm
by 13045482
EXCELLENT!!..It worked PERFECTLY, the way i wanted!!... MANY MANY THANKS!!!!

Re: legend with checkbox style

Posted: Thu Mar 11, 2010 1:11 pm
by yeray
Hi shikha,

You're welcome!!! :D