Winforn中實現ZedGraph自定義添加右鍵菜單項(附源碼下載):編程
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100140716佈局
Winform中實現ZedGraph中曲線右鍵顯示爲中文:ui
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292this
在上面兩篇文章的基礎上,已經實現的ZedGraph的右鍵效果spa
如今須要根據當前圖形的Y軸的選項自動追加右鍵菜單,打開設置Y軸上下限的輸入面板,進而設置Y軸的上下限。.net
好比當曲線圖有兩個Y軸,那麼在右鍵時就會顯示兩個設置上下限的菜單。code
點擊相應的右鍵菜單時彈出設置上下限的窗口orm
將上限設置爲150以後對象
注:blog
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公衆號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
在初始化ZedGraph的圖形方法中綁定其右鍵菜單事件
zgc.ContextMenuBuilder -= zgc_ContextMenuBuilder; //上下文菜單生成事件訂閱 zgc.ContextMenuBuilder += zgc_ContextMenuBuilder; //上下文菜單生成事件訂閱
而後在右鍵菜單事件中
private static void zgc_ContextMenuBuilder(ZedGraphControl control, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectState objState) { #region 擴展上下文菜單 #region 設置上下限菜單 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("設置[{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 = @"複製到剪貼板"; break; case "copy": item.Text = @"複製"; item.Click += item_Click; break; case "page_setup": item.Text = @"頁面設置..."; break; case "print": item.Text = @"打印..."; break; case "save_as": item.Text = @"另存圖表..."; break; case "set_default": item.Text = @"恢復默認大小"; break; case "show_val": item.Text = @"顯示節點數值"; break; case "title_def": item.Text = @"標題"; 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("設置[{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); }
注:
首先循環全部的Y軸,並經過YAxis yAxis = control.GraphPane.YAxisList[i]獲取Y軸對象。而後設置菜單選項的名稱、文本和點擊事件。
在點擊事件中彈出設置上下限窗口
窗口布局設置以下
而後修改窗體代碼爲
public partial class FrmSetScaleMaxMin : DevExpress.XtraEditors.XtraForm { #region 字段定義 private string _title = String.Empty; //保存要設置的座標標題 private double _orignalMax = 0.0; //保存原座標上限 private double _orignalMin = 0.0; //保存原座標下限 #endregion #region 構造方法 public FrmSetScaleMaxMin(string title, double orignalMax, double orignalMin) { this._title = title; this._orignalMax = orignalMax; this._orignalMin = orignalMin; InitializeComponent(); } #endregion #region 屬性定義 /// <summary> /// 設置後的座標上限 /// </summary> public double Max { get { double value = 0.0; double.TryParse(this.txtMax.EditValue.ToString(), out value); return value; } } /// <summary> /// 設置後的座標下限 /// </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 }
點擊肯定後返回結果並設置Y軸刻度的最大和最小值,而後刷新曲線圖。
最後將此右鍵菜單項添加到右鍵中去。