場景 Winforn中實現ZedGraph自定義添加右鍵菜單項(附源碼下載): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100140716 Winform中實現ZedGraph中曲線右鍵顯示為中文: https://blog ...
場景
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 = 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軸刻度的最大和最小值,然後刷新曲線圖。
最後將此右鍵菜單項添加到右鍵中去。