Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限
場景
Winforn中實現(xiàn)ZedGraph自定義添加右鍵菜單項(附源碼下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100140716
Winform中實現(xiàn)ZedGraph中曲線右鍵顯示為中文:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292
在上面兩篇文章的基礎(chǔ)上,已經(jīng)實現(xiàn)的ZedGraph的右鍵效果
?
現(xiàn)在需要根據(jù)當(dāng)前圖形的Y軸的選項自動追加右鍵菜單,打開設(shè)置Y軸上下限的輸入面板,進而設(shè)置Y軸的上下限。
比如當(dāng)曲線圖有兩個Y軸,那么在右鍵時就會顯示兩個設(shè)置上下限的菜單。
?
點擊相應(yīng)的右鍵菜單時彈出設(shè)置上下限的窗口
?
將上限設(shè)置為150之后
?
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。
實現(xiàn)
在初始化ZedGraph的圖形方法中綁定其右鍵菜單事件
zgc.ContextMenuBuilder -= zgc_ContextMenuBuilder;???? //上下文菜單生成事件訂閱 zgc.ContextMenuBuilder += zgc_ContextMenuBuilder;???? //上下文菜單生成事件訂閱然后在右鍵菜單事件中
private static void zgc_ContextMenuBuilder(ZedGraphControl control, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectStateobjState){#region 擴展上下文菜單#region 設(shè)置上下限菜單ToolStripMenuItem mnuYAxisUpLower = null;for (int i = 0; i < control.GraphPane.YAxisList.Count; i++){YAxis yAxis = control.GraphPane.YAxisList[i];mnuYAxisUpLower = new ToolStripMenuItem();mnuYAxisUpLower.Name = "mnuYAxisUpLower" + i;mnuYAxisUpLower.Text = String.Format("設(shè)置[{0}]上下限", yAxis.Title.Text);mnuYAxisUpLower.Click += delegate(object sender, EventArgs e){Dialog.FrmSetScaleMaxMin frmSetScaleMaxMin = new FrmSetScaleMaxMin(mnuYAxisUpLower.Text, yAxis.Scale.Max, yAxis.Scale.Min);DialogResult result = frmSetScaleMaxMin.ShowDialog();if (result == DialogResult.OK){yAxis.Scale.Max = frmSetScaleMaxMin.Max;yAxis.Scale.Min = frmSetScaleMaxMin.Min;//更改上下限后刷新曲線圖control.AxisChange();control.Refresh();control.Invalidate();}};menuStrip.Items.Add(mnuYAxisUpLower);}#endregion#endregion#region 漢化上下文菜單中的菜單項foreach (ToolStripMenuItem item in menuStrip.Items){switch (item.Name){case "copied_to_clip":item.Text = @"復(fù)制到剪貼板";break;case "copy":item.Text = @"復(fù)制";item.Click += item_Click;break;case "page_setup":item.Text = @"頁面設(shè)置...";break;case "print":item.Text = @"打印...";break;case "save_as":item.Text = @"另存圖表...";break;case "set_default":item.Text = @"恢復(fù)默認大小";break;case "show_val":item.Text = @"顯示節(jié)點數(shù)值";break;case "title_def":item.Text = @"標(biāo)題";break;case "undo_all":item.Text = @"還原所有縮放";break;case "unpan":item.Text = @"還原上一步縮放";break;case "unzoom":item.Text = @"還原縮放";break;}}#endregion}上面代碼包含了漢化右鍵菜單的代碼,主要的是上面擴展右鍵菜單的代碼部分
?
ToolStripMenuItem mnuYAxisUpLower = null;for (int i = 0; i < control.GraphPane.YAxisList.Count; i++){YAxis yAxis = control.GraphPane.YAxisList[i];mnuYAxisUpLower = new ToolStripMenuItem();mnuYAxisUpLower.Name = "mnuYAxisUpLower" + i;mnuYAxisUpLower.Text = String.Format("設(shè)置[{0}]上下限", yAxis.Title.Text);mnuYAxisUpLower.Click += delegate(object sender, EventArgs e){Dialog.FrmSetScaleMaxMin frmSetScaleMaxMin = new FrmSetScaleMaxMin(mnuYAxisUpLower.Text, yAxis.Scale.Max, yAxis.Scale.Min);DialogResult result = frmSetScaleMaxMin.ShowDialog();if (result == DialogResult.OK){yAxis.Scale.Max = frmSetScaleMaxMin.Max;yAxis.Scale.Min = frmSetScaleMaxMin.Min;//更改上下限后刷新曲線圖control.AxisChange();control.Refresh();control.Invalidate();}};menuStrip.Items.Add(mnuYAxisUpLower);}注:
首先循環(huán)所有的Y軸,并通過YAxis yAxis = control.GraphPane.YAxisList[i]獲取Y軸對象。然后設(shè)置菜單選項的名稱、文本和點擊事件。
在點擊事件中彈出設(shè)置上下限窗口
窗口布局設(shè)置如下
?
然后修改窗體代碼為
public partial class FrmSetScaleMaxMin : DevExpress.XtraEditors.XtraForm{#region 字段定義private string _title = String.Empty;?????? //保存要設(shè)置的坐標(biāo)標(biāo)題private double _orignalMax = 0.0;?????????? //保存原坐標(biāo)上限private double _orignalMin = 0.0;?????????? //保存原坐標(biāo)下限#endregion#region 構(gòu)造方法public FrmSetScaleMaxMin(string title, double orignalMax, double orignalMin){this._title = title;this._orignalMax = orignalMax;this._orignalMin = orignalMin;InitializeComponent();}#endregion#region 屬性定義/// <summary>/// 設(shè)置后的坐標(biāo)上限/// </summary>public double Max{get{double value = 0.0;double.TryParse(this.txtMax.EditValue.ToString(), out value);return value;}}/// <summary>/// 設(shè)置后的坐標(biāo)下限/// </summary>public double Min{get{double value = 0.0;double.TryParse(this.txtMin.EditValue.ToString(), out value);return value;}}#endregion#region 事件處理/// <summary>/// 窗體加載/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void FrmSetScaleMaxMin_Load(object sender, EventArgs e){this.Text = this._title;this.txtMax.EditValue = this._orignalMax;this.txtMin.EditValue = this._orignalMin;}/// <summary>/// 確定/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnOK_Click(object sender, EventArgs e){this.DialogResult = System.Windows.Forms.DialogResult.OK;}/// <summary>/// 取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCancel_Click(object sender, EventArgs e){this.DialogResult = System.Windows.Forms.DialogResult.Cancel;}#endregion}點擊確定后返回結(jié)果并設(shè)置Y軸刻度的最大和最小值,然后刷新曲線圖。
最后將此右鍵菜單項添加到右鍵中去。
總結(jié)
以上是生活随笔為你收集整理的Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中获取多个对象list中对象共有的属
- 下一篇: Winform中实现ZedGraph滚轮