C# Visionpro 主窗体调用子窗体(自定义控件)按照行列进行显示

107 篇文章 136 订阅

自定义控件界面及控件如下
在这里插入图片描述
控件列表
在这里插入图片描述

自定义控件代码:

using Cognex.VisionPro;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.ToolGroup;
using System.Security.RightsManagement;
using System.Windows.Forms.VisualStyles;

namespace VMPro2024._08.UserControl8
{
    public partial class DisplayControl : UserControl
    {
        #region 申明变量
        public DisplayControl displayControl;
        public TitleForm titleForm;
        #endregion

        DisplayControl _displayControl;
        public DisplayControl()
        {
            InitializeComponent();
            this.displayControl = _displayControl;
            //titleForm.LockControl(true);

            //titleForm.MdiParent = this;
            //titleForm.Dock=DockStyle.Fill;
            //titleForm.Show();


        }

        public void IniDisplay()
        {
            this.cogDisplayStatusBarV21.Display = this.cogRecordDisplay1;
            this.cogDisplayToolbarV21.Display = this.cogRecordDisplay1;
            this.cogRecordDisplay1.AutoFit = true;
        }

        public CogRecordDisplay cogRecordDisplay
        {
            get { return this.cogRecordDisplay1; }
        }

        public ToolStripStatusLabel toolStripStatusLabel
        {
            get
            {
                return this.相机实时_toolStripLabel;
            }
        }
    }
}

窗体设置按钮调用另一个子窗体截图及代码
在这里插入图片描述
控件:
在这里插入图片描述
代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace VMPro2024._08.WinForm
{
    public partial class WindFormSetting : Form
    {
        private int _row;

        public int cameraCount = 0;
        public int camerrow = 0;
        //public int cameraCount = 0; 

        public int Row
        {
            get { return _row; }
            set { _row = value; }
        }

        private int _column;
        public int Column
        {
            get { return _column; }
            set { _column = value; }
        }

        public WindFormSetting(int row, int column, Form parent)
        {
            this.Row = row;
            this.Column = column;
            InitializeComponent();

            this.StartPosition = FormStartPosition.Manual;
            this.Location = new Point(parent.Location.X + (parent.Size.Width / 2) - (this.Size.Width / 2),
                                    parent.Location.Y + (parent.Size.Height / 2) - (this.Size.Height));
            this.btnSetting.Click += new EventHandler(btnSetting_Click);

            //numRow = new NumericUpDown();
            //numColumn = new NumericUpDown();
            //mCamerCount(cameraCount);
        }
        public WindFormSetting()
        {

        }

        private void WindFormSetting_Load(object sender, EventArgs e)
        {
            this.numRow.Value = this.Row;
            this.numColumn.Value = this.Column;
        }

        private void btnSetting_Click(object sender, EventArgs e)
        {
            this.Row = Convert.ToInt32(this.numRow.Value);
            this.Column = Convert.ToInt32(this.numColumn.Value);

            this.Close();
        }

        /// <summary>
        /// 计算相机个数
        /// </summary>
        /// <param name="count"></param>
        //public int mCamerCount(int count)
        //{
            //用于计算相机个数
            //camerrow = Convert.ToInt32(this.numRow.Value);
            //camercolumn = Convert.ToInt32(this.numColumn.Value);

            //cameraCount = camerrow * camercolumn;//计算相机个数

            //return cameraCount;
        //}
        //设置行
        private void numRow_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.numRow.Value <= 3)
            {
                this.numRow.Value++;
            }
        }

        private void numRow_MouseUp(object sender, MouseEventArgs e)
        {
            if (this.numRow.Value >= 2)
            {
                this.numRow.Value--;
            }
        }

        //设置列
        private void numColumn_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.numColumn.Value <= 4)
            {
                this.numColumn.Value++;
            }
        }

        private void numColumn_MouseUp(object sender, MouseEventArgs e)
        {
            if (this.numColumn.Value >= 2)
            {
                this.numColumn.Value--;
            }
        }
    }
}

主窗体
在这里插入图片描述
主窗体代码:

#region 窗体个数变量
public DisplayControl[] displayControls = new DisplayControl[10];//显示控件
bool bEnlarge = false;//判断是否双击激活 cogRecordDisplay_DoubleClick事件
#endregion
 //设置窗体个数
 private void 窗体设置ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     WindFormSetting windFormSetting = new WindFormSetting(WindowConfig.gOnly.displayRow, WindowConfig.gOnly.displayColumn, this);
     windFormSetting.ShowDialog();
     DialogResult result = MessageBox.Show("是否重设显示个数", "选择按钮", MessageBoxButtons.YesNo);
     if (result == DialogResult.Yes)
     {
         WindowConfig.gOnly.displayRow = windFormSetting.Row;
         WindowConfig.gOnly.displayColumn = windFormSetting.Column;
         WindowConfig.SaveConfig();
         //需要添加窗体修改Log

         IniDisplayCount(windFormSetting.Row, windFormSetting.Column, true);
         LoadConfigXml(cameraCount);//计算相机个数
         WindowConfig.gOnly.cameraCount = Convert.ToInt32(cameraCount);//存储相机个数
         MessageBox.Show(cameraCount.ToString());
     }
     windFormSetting.Dispose();//窗体销毁
 }

 //初始化窗口 设置tableLayoutPanel的相关属性
 private void IniDisplayCount(int RowCount, int ColumnCount, bool bChange)
 {
     int displayCount = 0;
     tableLayoutPanel2.RowStyles.Clear();
     tableLayoutPanel2.ColumnStyles.Clear();
     tableLayoutPanel2.RowCount = RowCount;
     tableLayoutPanel2.ColumnCount = ColumnCount;

     for (int i = 0; i < tableLayoutPanel2.RowCount; i++)
     {
         tableLayoutPanel2.RowStyles.Add(new ColumnStyle(SizeType.Percent, 50));
     }

     for (int i = 0; i < tableLayoutPanel2.ColumnCount; i++)
     {
         tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
     }

     if (bChange)
     {
         for (int i = 0; i < displayControls.Length; i++)
         {
             if (displayControls[i] != null)
             {
                 displayControls[i].cogRecordDisplay.DoubleClick -= cogRecordDisplay_DoubleClick;
                 displayControls[i].Dispose();
                 displayControls[i] = null;
             }
         }
     }
     for (int i = 0; i < RowCount; i++)
     {
         for (int j = 0; j < ColumnCount; j++)
         {
             displayControls[displayCount] = new DisplayControl();
             displayControls[displayCount].IniDisplay();
             displayControls[displayCount].Dock = DockStyle.Fill;
             tableLayoutPanel2.Controls.Add(displayControls[displayCount], j, i);
             displayControls[displayCount].cogRecordDisplay.DoubleClick += cogRecordDisplay_DoubleClick;
             displayCount++;
         }
     }

 }

 private void cogRecordDisplay_DoubleClick(object sender, EventArgs e)
 {
     Cognex.VisionPro.CogRecordDisplay recordDisplay = sender as Cognex.VisionPro.CogRecordDisplay;

     if (bEnlarge)
     {
         bEnlarge = false;
         tableLayoutPanel2.Controls.Add(recordDisplay.Parent);
         //panel2.Controls.Add(recordDisplay.Parent);
         recordDisplay.Parent.Parent = tableLayoutPanel2;
         recordDisplay.Parent.Dock = DockStyle.Fill;
         tableLayoutPanel2.Show();
     }
     else
     {
         bEnlarge = true;
         tableLayoutPanel2.Controls.Remove(recordDisplay.Parent);
         //panel2.Controls.Remove(recordDisplay.Parent);
         recordDisplay.Parent.Parent = this;
         recordDisplay.Parent.BringToFront();
         recordDisplay.Parent.Dock = DockStyle.Fill;
         tableLayoutPanel2.Hide();
         //panel2.Hide();
     }
 }

琐碎时间阅读基础知识,详情关注微信公众号“知识代码AI”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值