簡體   English   中英

使用MouseEvents更改C#Winforms中圖表系列的外觀

[英]Using MouseEvents to change chart series appearance in C# Winforms

我的表單中有一個動態創建的點狀圖,因此每次運行表格時,圖表上系列的編號/名稱都可以更改。 我希望能夠使用圖例突出顯示一個系列,以便更好地查看僅屬於該系列的點。 我已經能夠使用較粗的標記邊框來突出顯示該系列,但是我卻無法將其突出顯示,因此,再次單擊該標記或將其移出圖例項,就可以將其突出顯示。 這是我突出顯示所選系列中的點的方法:

            private void plot.MouseMove (object sender, MouseEventArgs e)
                    {
                        HitTestResult result = plot.HitTest(e.X, e.Y);
                        if (result != null && result.Object != null)
                        {
                            if (result.ChartElementType == ChartElementType.LegendItem)
                            {
                                string selseries = result.Series.Name;
                                plot.Series[selseries].MarkerBorderWidth = 3;
                                plot.Series[selseries].MarkerSize = 11;
                                plot.Series[selseries].MarkerBorderColor = Color.Black;
                            }
                        }

                    };

突出顯示后如何取消選擇它? 是否有更好的方法來選擇性地突出顯示一個系列而不是其他系列? 理想情況下,我希望將除選定的一個系列以外的所有系列更改為較暗的顏色,從而突出顯示所討論的系列,但是我將選擇能夠/取消選擇所討論的系列。

為了“記住”突出顯示的系列,您需要在該方法之外存儲一個引用,以便以后可以訪問它。 然后,每當您要清除更改時,只需查找先前保存的內容並重置屬性即可。 這是一些示例代碼:

string selectedSeries = "";     // store a class-scoped reference

private void plot.MouseMove(object sender, MouseEventArgs e)
{
    HitTestResult result = plot.HitTest(e.X, e.Y);
    if (result != null && result.Object != null && result.ChartElementType == ChartElementType.LegendItem)
    {
        string selseries = result.Series.Name;

        // store a reference to what we are changing:
        selectedSeries = selseries;

        plot.Series[selseries].MarkerBorderWidth = 3;
        plot.Series[selseries].MarkerSize = 11;
        plot.Series[selseries].MarkerBorderColor = Color.Black;
    }
    else
    {
        // if we clear the selection here, then we are clearing the selection
        // whenever we move off the legend item... that was one of your use cases
        // you could also do something similar in a mouse click event to cover your other use case.

        if (selectedSeries != "")
        {
            plot.Series[selectedSeries].MarkerBorderWidth = 1; // set these to default value
            plot.Series[selectedseries].MarkerSize = 5;
            plot.Series[selectedseries].MarkerBorderColor = Color.Green;
            selectedSeries = ""; // reset selection
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM