【发布时间】:2012-05-01 11:00:07
【问题描述】:
我有两个自定义 ListBox 类:
public class MyListBox : ListBox
public class MyCheckedListBox : ListBox
它们是 winforms System.Windows.Forms.ListBox 控件的包装器,用于添加一些实现和样式等。
我添加了以下代码,以便在必要时删除垂直滚动条:
private const int WS_VSCROLL = 0x00200000;
private bool verticalScrollbar = true;
[DefaultValue(true)]
public bool VerticalScrollbar
{
get { return this.verticalScrollbar; }
set
{
if (this.verticalScrollbar != value)
{
this.verticalScrollbar = value;
this.RecreateHandle();
}
}
}
protected override System.Windows.Forms.CreateParams CreateParams
{
get
{
System.Windows.Forms.CreateParams parms = base.CreateParams;
if (!this.verticalScrollbar)
parms.Style &= ~WS_VSCROLL;
return parms;
}
}
我将每个控件添加到现有用户控件ProfileGeneralPanel 中,它们按预期工作,默认情况下显示滚动条,将VerticalScrollbar 属性设置为 false 会删除它。虽然,现在需要在多个地方使用这种安排,所以我将这个结构提取到一个单独的新用户控件,称为PrivilegesListView。这个新控件在一个表中有一个MyCheckedListBox 和两个MyListBox。这三个都将VerticalScrollbar 设置为false。到目前为止一切都很好,设计师正确地显示了一切。
但是,当我尝试将此控件从工具箱拖到另一个用户控件上时,会引发异常,说明它找不到方法:MyCheckedListBox.set_VerticalScrollbar(Boolean)
有问题的方法显然是属性的生成方法。我已经尝试了所有常规方法,清理并重建,重新启动了 Visual Studio。出于绝望,我还检查了构建时生成的 IL,MyCheckedListBox 类确实定义了该方法。任何想法为什么它无法找到它?
注意控件本身的设计器每次都可以正常打开,只有在添加到另一个表单时才会出现问题。
注意该问题仅在 VerticalScrollbar 设置为 false 时发生,无论是在设计器为 PrivilegesListView 生成的代码中还是在构造函数本身中手写。
注意:不幸的是,在这个阶段不能使用像DataGridView 这样的其他控件来代替列表框...
【问题讨论】:
标签: c# winforms visual-studio-2010 windows-forms-designer