場景
Winforn中實作ZedGraph自定義添加右鍵選單項(附原始碼下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100140716
Winform中實作ZedGraph中曲線右鍵顯示為中文:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292
在上面兩篇文章的基礎上,已經實作的ZedGraph的右鍵效果

現在需要根據當前圖形的Y軸的選項自動追加右鍵選單,打開設定Y軸上下限的輸入面板,進而設定Y軸的上下限,
比如當曲線圖有兩個Y軸,那么在右鍵時就會顯示兩個設定上下限的選單,

點擊相應的右鍵選單時彈出設定上下限的視窗

將上限設定為150之后

注:
博客主頁:
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 = https://www.cnblogs.com/badaoliumangqizhi/p/0.0; double.TryParse(this.txtMax.EditValue.ToString(), out value); return value; } } /// <summary> /// 設定后的坐標下限 /// </summary> public double Min { get { double value = https://www.cnblogs.com/badaoliumangqizhi/p/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 = https://www.cnblogs.com/badaoliumangqizhi/p/this._orignalMax; this.txtMin.EditValue = https://www.cnblogs.com/badaoliumangqizhi/p/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軸刻度的最大和最小值,然后重繪曲線圖,
最后將此右鍵選單項添加到右鍵中去,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/1730.html
標籤:WinForm
