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

3

我有一个名为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;
}

但是默认情况下,跑马灯效果总是启用的。如果我想关闭跑马灯,我必须在表单中通过公共变量picturePanel1.Marquee = false来设置它。那么我该如何在用户控件中将跑马灯默认设置为关闭呢?


最佳实践是在你困惑时使用 default(T),其中 T 可以是任何类型,它将批处理 LHS。 bool someValue = default(bool); - Zenwalker
3个回答

2

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

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

既然你提到了设计师,我回头检查了一下。我没有考虑到我拖动到窗体上的现有控件不会随着用户控件类的更改而更新。在窗体上拖动的新控件将具有未启用跑马灯效果的属性。 - Ryder

0

布尔值默认情况下始终为false。你没有一个叫做marquee的本地变量吧?

只需在private bool marquee = false;上设置断点,然后逐步执行代码,你很快就会找到它。


不,我只声明了一个名为marquee的变量。此外,如果那是真的,那么我的公共变量“Marquee”就不会给我期望的行为。我可以使用“picturePanel1.Marquee = true”或“picturePanel.Marquee = false”来打开和关闭跑马灯模式。但我希望默认情况下没有跑马灯。我已经尝试在PicturePanel类中明确将其设置为false。 - Ryder
@Ryder 布尔值在默认情况下肯定是假的。请查看文档。http://msdn.microsoft.com/zh-cn/library/c8f5xwh7.aspx - alexn

0

你的问题可能是当你使用设计器在表单上“绘制”控件时,它可能会注册MouseDown事件并将Marquee设置为true。你可以通过在事件处理程序中检查this.DesignMode来防止这种情况发生。

例如:

if (this.DesignMode) return;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接