[编译期间显示的用户控制错误消息

问题描述 投票:0回答:1

我已经在Visual Studio 2019中创建了C#用户控件。它具有一个名为“ BoundLayout”的属性。

    public Layout BoundLayout
    {
        get
        {
            return _Layout;
        }

        set
        {
            _Layout = value as Layout;
            if (_Layout == null)
            {
                MessageBox.Show("Value submitted is not of type 'LAYOUT'","Invalid Value",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            else
            {
                InitializeControl();
            }
        }
    }

如果程序尝试为属性分配不兼容的值,则会在MessageBox中显示一条错误消息。这可以正常工作。

非常奇怪的是,无论何时我建立(不运行)该项目,此错误消息都会显示在其模式消息框中,必须先确认该错误消息,然后才能返回Visual Studio。在“调试”和“发布”模式下进行构建时,都会发生这种情况。添加到属性集代码的断点不会被触发。构建成功完成,没有错误或警告,我可以运行该应用程序。

应用程序(包括此用户控件)将按预期运行。我以前从未遇到过这种行为。还有其他人吗?

Compiler 'Build' results

用户控件的完整(仍在开发中)代码:

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

namespace Dispatcher
{
    public partial class DivisionModuleGrid : UserControl
    {
        private Layout _Layout = null;

        private ObservableListSource<LayoutDivision> _LayoutDivisions;

        private DivisionModulesList _activeDivision = null;

        private int _divisionCount;

        public Layout BoundLayout
        {
            get
            {
                return _Layout;
            }

            set
            {
                _Layout = value as Layout;
                if (_Layout == null)
                {
                    MessageBox.Show("Value submitted is not of type 'LAYOUT'","Invalid Value",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
                else
                {
                    InitializeControl();
                }
            }
        }

        public DivisionModulesList ActiveDivision
        {
            get
            {
                return _activeDivision;
            }

            set
            {
                _activeDivision = value as DivisionModulesList;

                if (_activeDivision != null)
                {
                    lbl_ActiveDivision.Text = _activeDivision.DivisionName;
                }
                else
                {
                    lbl_ActiveDivision.Text = "-No Active Division-";
                }
            }
        }


        public DivisionModuleGrid()
        {
            InitializeComponent();
        }


        private void InitializeControl()
        {
            _LayoutDivisions = _Layout.LayoutDivisions;
            _divisionCount = _LayoutDivisions.Count;

            tbx_LayoutName.Text = _Layout.LayoutName;

            //  Grid Layout divide into Rows & Columns
            int tlp_rows = _divisionCount / 3;



            TableLayoutPanel tlp = (TableLayoutPanel)(Controls.Find("tlp_DivisionGrid", false)[0]);
            DivisionModulesList dml;

            foreach (LayoutDivision ld in _LayoutDivisions)
            {
                dml = new DivisionModulesList(ld);
                dml.BoundDivision = ld;

                tlp.Controls.Add(dml);

            }


        }

        private void Tlp_DivisionGrid_Paint(object sender, PaintEventArgs e)
        {

        }
    }
}
c# visual-studio winforms user-controls
1个回答
0
投票

[为用户控件创建自己的属性,并在其他地方使用此用户控件时,设计器正在为该属性生成代码,例如:

 yourControl.BoundLayout = null;

在Designer.cs文件中搜索;它会解决问题,直到重新生成代码。

如果设计者显示您的控件,它将运行您的代码,并在设计时(而不是构建或运行时)显示您的MessageBox。永远避免把它放在

 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(false)]
 public Layout BoundLayout

在所有属性上,如果您打算仅通过代码而不是在Designer内进行修改。

在其他地方再次使用UserControl时,它将不再再次创建此BoundLayout = null,但是对于现有对UserControl的引用,您必须手动删除此行。

热门问题
推荐问题
最新问题