none
我想利用C#透過滑鼠事件 畫出點 (在Chart元件) RRS feed

  • 問題

  • 主要以Chart當作我的二維座標系,透過滑鼠事把我想要點擊的位置線顯示在Chart中

    如:我在(2,5)點擊 就會有一個點在那個位置上,且我希望點擊複數個點

    程式碼該如何撰寫 ?  感謝各位幫忙解答

    (被非透過Chart裡參數出線)


    2014年9月27日 上午 06:25

解答

所有回覆

  • 您可以利用Chart控制項的PostPaint事件, 請參考:Tutorial: Customizing a Chart with Events

    • 已標示為解答 KunLinTsai 2014年9月28日 下午 02:56
    2014年9月27日 上午 08:30
  • 目前我利用該滑鼠事件

    但有個問題  我的座標系會變成以chart為準

    也就是(0,0)變成從左上開始 造成越往右下移動整個顯示的點越來越大

    只是我該怎麼轉換成一般的"二維數學座標系"並設定我需要的範圍呢?

    2014年9月27日 上午 09:43
  • 2014年9月28日 下午 12:09
  • 感謝幫忙我找到改變座標的方法

    不過

    裡面前面變數設定

    if (e.ChartElement is Series && ((Series)e.ChartElement).Name == "Series2" )

    Series s = e.Chart.Series[0];

    這兩邊的Series(有標粗體和打底線) 有點不太會設定

    可以稍微說明嗎


    • 已編輯 KunLinTsai 2014年9月28日 下午 02:49
    2014年9月28日 下午 02:47
  • 該範例是假設畫完名為 "Series2" 的 Series 物件後,需要自行在最大值的點上加畫圈圈。

    因此確定該事件繪製完成的e.ChartElement 是 Series (類別)。 並將e.ChartElement 轉型成Series後查看該series物件的名稱是 "Series2"。  s (類別是 Series) 是 if 區塊內設定的區塊變數,假設Chart內第0條的series就是"Series2" 複製一份參照到 s,供下文使用。

    如果只是想在Chart控制項上畫點,不須使用PostPaint事件。你只需訂用 MouseUP 和標準的 Paint事件即可,另外用一個List<Point> 陣列物件收錄點擊的點,並供Paoint事件處理函示繪製圖點使用。範例程式入下:

            private void chart1_MouseUp(object sender, MouseEventArgs e)
            {
                points.Add(e.Location);          
                chart1.Invalidate();
            }

            List<Point> points = new List<Point>();

            private void chart1_Paint(object sender, PaintEventArgs e)
            {
               Rectangle circle = new Rectangle(0, 0, 5, 5);
                foreach( Point pt in points)
                {
                    circle.X = pt.X - 3;
                    circle.Y = pt.Y - 3;
                    e.Graphics.DrawEllipse(Pens.Red, circle);
                }
            }

    • 已提議為解答 Fred Yang 2014年10月3日 上午 04:49
    2014年10月3日 上午 04:49