Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为用户控件设置默认值?_C#_.net_Winforms - Fatal编程技术网

C# 如何为用户控件设置默认值?

C# 如何为用户控件设置默认值?,c#,.net,winforms,C#,.net,Winforms,我有一个名为PicturePanel的用户控件。关于鼠标事件(MouseDown、MouseMove、MouseUp),我有以下内容: protected override void OnMouseDown(MouseEventArgs e) { if (marquee == true && e.Button == MouseButtons.Left && BackgroundImage != null) { //Code to

我有一个名为PicturePanel的用户控件。关于鼠标事件(MouseDown、MouseMove、MouseUp),我有以下内容:

protected override void OnMouseDown(MouseEventArgs e)
{
    if (marquee == true && e.Button == MouseButtons.Left && BackgroundImage != null)
    {
          //Code to create rectangular marquee
    }
    else
    {

    }
}
默认情况下,类级别变量
private bool marquee=false
。和一个公共的

private bool marquee = false;
public bool Marquee
{
    get { return marquee; }
    set { marquee = value; }
}
我甚至尝试在初始化时分配
false

public PicturePanel()
{
    InitializeComponent();
    marquee = false;
}

但默认情况下,marquee始终为true。如果我想关闭marquee,我必须通过表单中的公共变量
picturePanel1.marquee=false来设置它。在用户控件中,如何在默认情况下使选框为false?

嗯,布尔值在默认情况下总是false。你没有一个叫做marquee的局部变量吗


只需在
private bool marquee=false上设置断点并逐步浏览您的代码,您会发现它非常快。

我不确定这是否是您所说的,但是如果您指的是在设计器中看到的默认值,那么您只需要将以下属性添加到您的属性中:

[DefaultValue(false)]
public bool Marquee
...

您的问题可能是,当您使用设计器在窗体上“绘制”控件时,它可能正在注册MouseDown事件,将选框设置为true。您可以通过在事件处理程序中选中
this.DesignMode
来防止这种情况

例如:

if (this.DesignMode) return;

最佳实践是使用默认值(T),其中T可以是任何类型,当用户感到困惑时,可以对LHS进行批处理。bool someValue=默认值(bool);不,我在顶部只声明了一个marquee变量。此外,如果这是真的,那么我的公共变量
Marquee
就不会给出预期的行为。我可以使用
picturePanel1.marquee=true
picturePanel.marquee=false
打开和关闭选框模式。但我希望默认设置为禁用选框。我曾尝试在PicturePanel类中将其显式设置为false。@默认情况下Ryder booleans绝对为false。请看一下文档。自从你提到设计师,我就回去检查了。我没有考虑到我拖到表单上的现有控件不会随着用户控件类的更改而更新。我拖到窗体上的新控件的选框为false。