我有两个自定义 ListBox 类:
public class MyListBox : ListBox
public class MyCheckedListBox : ListBox
它们是 winformsSystem.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
还是在构造函数本身中手写。
注意:不幸的是,在这个阶段不可能使用像 a 这样的其他控件DataGridView
来代替列表框......