網(wǎng)站首頁 編程語言 正文
Chart折線圖使用鼠標(biāo)滾輪放大、縮小和平移曲線
使用鼠標(biāo)滾輪滾動(dòng)放大和縮小X軸的寬度,鼠標(biāo)左鍵按住拖動(dòng)實(shí)現(xiàn)曲線的左右平移,不再使用滾動(dòng)條。
添加鼠標(biāo)滾輪事件
在chart控件自帶的鼠標(biāo)事件中并沒有鼠標(biāo)的滾輪事件,因此需要手動(dòng)添加一下,在窗體的Designer.cs文件下的InitializeComponent()函數(shù)中添加如下代碼
this.chart1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.chart1_MouseWheel);
實(shí)現(xiàn)鼠標(biāo)滾輪事件
private void chart1_MouseWheel(object sender, MouseEventArgs e)
{
// 實(shí)驗(yàn)發(fā)現(xiàn)鼠標(biāo)滾輪滾動(dòng)一圈時(shí)e.Delta = 120,正反轉(zhuǎn)對應(yīng)正負(fù)120
if (chart1.ChartAreas[0].AxisX.ScaleView.Size > 0) // 防止越過左邊界
{
chart1.ChartAreas[0].AxisX.ScaleView.Size += (e.Delta / 120); // 每次縮放1
}
else if(e.Delta > 0)
{
chart1.ChartAreas[0].AxisX.ScaleView.Size += (e.Delta / 120); // 每次縮放1
}
}
上述方法即可實(shí)現(xiàn)鼠標(biāo)滾輪滾動(dòng)完成曲線的縮放功能,下面實(shí)現(xiàn)鼠標(biāo)按鍵按住左右拖動(dòng)實(shí)現(xiàn)曲線的左右平移。
初始化有關(guān)參數(shù)
// 定義兩個(gè)全局變量
public bool isMouseDown = false;
public int lastMove = 0; // 用于記錄鼠標(biāo)上次移動(dòng)的點(diǎn),用于判斷是左移還是右移
// 初始化ScaleView,可根據(jù)首次出現(xiàn)在chart中的數(shù)據(jù)點(diǎn)數(shù)修改合適的值
chart1.ChartAreas[0].AxisX.ScaleView.Size = 5;
// 設(shè)置不顯示chart自帶的滾動(dòng)條
chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = false;
chart1.ChartAreas[0].AxisY.ScrollBar.Enabled = false;
// 注意不要開啟X軸游標(biāo),默認(rèn)不開啟,如下設(shè)置false或者不設(shè)置下列參數(shù)
chart1.ChartAreas[0].CursorX.IsUserEnabled = false;
chart1.ChartAreas[0].CursorX.AutoScroll = false;
chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = false;
添加鼠標(biāo)按下、彈起和移動(dòng)事件
上述事件在chart控件中均自帶,直接添加即可,事件代碼如下:
// 鼠標(biāo)按下事件
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
lastMove = 0;
isMouseDown = true;
}
// 鼠標(biāo)彈起事件
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}
// 鼠標(biāo)移動(dòng)事件
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
// 可更改(交換)如下加減1或if條件來設(shè)置鼠標(biāo)移動(dòng)時(shí)曲線移動(dòng)方向
if(lastMove != 0 && e.X - lastMove > 0)
chart1.ChartAreas[0].AxisX.ScaleView.Position += 1; // 每次移動(dòng)1
else if(lastMove != 0 && e.X - lastMove < 0)
chart1.ChartAreas[0].AxisX.ScaleView.Position -= 1; // 每次移動(dòng)1
lastMove = e.X;
}
}
最終效果如下,圖片前面黑呼呼的為控制臺(tái)輸出,似乎有點(diǎn)看不清(可忽略),可觀察到鼠標(biāo)滾輪的變化。
如何使用Chart圖表
Chart控件可以用來繪制波形圖、柱狀圖、餅圖、折線圖等,用來進(jìn)行數(shù)據(jù)表現(xiàn)是很不錯(cuò)的,現(xiàn)在簡單說一下這個(gè)控件的使用方法
效果圖
我們首先要加載Chart控件
然后打開控件的屬性窗口
在這個(gè)窗口里面我們可以修改曲線的名稱,名稱在【數(shù)據(jù)》Name】里面修改
講一下屬性窗口里面我們用到的幾個(gè)選項(xiàng)的作用吧
數(shù)據(jù)
XValueType是X軸的數(shù)據(jù)類型,Y同理,這里我們選Time,可以隨時(shí)間改變
圖表
ChartType是圖表的類型,我們可以選出我們想要用的類型,這里選曲線
外觀
Color可以選擇曲線的顏色,這里我選了紅色
左邊的成員 框,是我們要顯示的曲線,可以添加多個(gè)
其他屬性如果有需要自行修改,修改好之后確定,回到窗口設(shè)計(jì)界面
在工具箱添加Timer
在Timer的事件窗口雙擊時(shí)鐘事件
代碼如下,請自行對照填到對應(yīng)的事件里面去
public partial class Form1 : Form
{
int cnt = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
chart1.Series[0].Points.AddY(cnt*cnt);
label1.Text = cnt.ToString();
cnt++;
}
private void chart1_Click(object sender, EventArgs e)
{
}
}
cnt是個(gè)自變量,曲線顯示的是cnt為底的2次指數(shù)曲線
原文鏈接:https://blog.csdn.net/baidu_41651935/article/details/118943228
相關(guān)推薦
- 2022-06-27 Python查找多個(gè)字典公共鍵key的方法_python
- 2023-07-02 Golang?time.Sleep()用法及示例講解_Golang
- 2023-07-18 @Autowired在IDEA中報(bào)錯(cuò),如果修改呢?
- 2022-04-08 python如何去除異常值和缺失值的插值_python
- 2022-05-18 C語言程序環(huán)境和預(yù)處理詳解分析_C 語言
- 2022-11-28 Git基礎(chǔ)學(xué)習(xí)之tag標(biāo)簽操作詳解_相關(guān)技巧
- 2023-01-26 Python上下文管理器深入講解_python
- 2022-09-23 C#實(shí)現(xiàn)自定義光標(biāo)并動(dòng)態(tài)切換_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支