【问题标题】:How to set default values for a user control?如何为用户控件设置默认值?
【发布时间】:2011-10-26 05:33:29
【问题描述】:

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

【问题讨论】:

  • 最佳实践是使用 default(T) ,其中 T 可以是任何类型,当您感到困惑时,它可以对 LHS 进行批处理。 bool someValue = default(bool);

标签: c# .net winforms


【解决方案1】:

我不确定这是否是您所说的,但如果您指的是您在 designer 中看到的默认值,那么您只需添加以下内容属性到您的财产:

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

【讨论】:

  • 既然你提了设计师,我就回去查了。我没有考虑到我拖到表单上的现有控件不会随着用户控件类的更改而更新。我拖到表单上的新控件将 Marquee 设置为 false。
【解决方案2】:

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

只需在private bool marquee = false; 上设置断点并单步执行您的代码,您就会很快发现它。

【讨论】:

  • 不,我只在顶部声明了一个选取框变量。此外,如果这是真的,那么我的公共变量 Marquee 不会给我预期的行为。我可以使用picturePanel1.Marquee = truepicturePanel.Marquee = false 打开和关闭选取框模式。但我希望默认设置为关闭选取框。我尝试在 PicturePanel 类中将其显式设置为 false。
  • @Ryder 布尔值在默认情况下绝对是错误的。看看文档。 msdn.microsoft.com/en-us/library/c8f5xwh7.aspx
【解决方案3】:

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

例子:

if (this.DesignMode) return;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2014-01-16
    • 2017-08-16
    • 2011-08-31
    • 2020-12-14
    相关资源
    最近更新 更多