Winform中自定義添加ZedGraph右鍵實現設置全部Y軸刻度的上下限

場景

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軸刻度的最大和最小值,而後刷新曲線圖。

最後將此右鍵菜單項添加到右鍵中去。

相關文章
相關標籤/搜索