我需要在ToolStrip中有一个MaskedTextBox,默认情况下不包含它,所以我按照我在网上找到的一些建议,创建了继承自ToolStripControlHost的自定义控件.当我运行应用程序时,我创建的内容非常有用,但它真的让设计师感到困惑.通过"搞砸",我的意思是自定义控件(以及其他一些)从ToolStrip中消失.此外,我无法再向ToolStrip添加新控件,也无法选择ToolStrip上的现有控件进行编辑.
这是我的课.
[DesignerCategory("code")]
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)]
public partial class ToolStripMaskedTextBox : ToolStripControlHost
{
public MaskedTextBox MaskedTextBox
{
get { return Control as MaskedTextBox; }
}
public ToolStripMaskedTextBox()
: base(CreateControlInstance()) { }
private static Control CreateControlInstance()
{
MaskedTextBox mtb = new MaskedTextBox();
mtb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
mtb.MinimumSize = new System.Drawing.Size(100, 16);
mtb.PasswordChar = '*';
return mtb;
}
}
Run Code Online (Sandbox Code Playgroud)
任何有关我可能做错的帮助都会给设计师带来困难,我将不胜感激.
添加信息
现在,当我在Visual Studio中打开我的类文件时,我收到一个警告页面,其中包含以下错误:
Constructor on type 'System.Windows.Forms.ToolStripControlHost' not found.
Run Code Online (Sandbox Code Playgroud)
添加信息2
只有在构建解决方案后才会出现此问题.我可以通过以最小的方式修改Form.Designer.cs文件来使设计人员正常工作.就像添加一个空格一样.从那以后,设计师将工作得很好.直到我构建解决方案.然后设计师再次冻结.表格中的所有控件都无法编辑.
dkn*_*ack 11
根据例外情况
Constructor on type 'System.Windows.Forms.ToolStripControlHost' not found.
Run Code Online (Sandbox Code Playgroud)
我在MSDN论坛上找到了一些信息.
发生这种情况是因为ToolStripControlHost该类没有没有参数的构造函数.
要解决此问题,可以使用非参数构造函数创建自己的ToolStripControlHost,并使ToolStripMaskedTextBox继承自ToolStripControlHost.尝试以下内容
//Declare a class that inherits from ToolStripControlHost.
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)]
public class ToolStripMaskedTextBox : MyCustomToolStripControlHost
{
// Call the base constructor passing in a MaskedTextBox instance.
public ToolStripMaskedTextBox() : base(CreateControlInstance()) { }
public MaskedTextBox MaskedTextBox
{
get
{
return Control as MaskedTextBox;
}
}
private static Control CreateControlInstance()
{
MaskedTextBox mtb = new MaskedTextBox();
mtb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
mtb.MinimumSize = new System.Drawing.Size(100, 16);
mtb.PasswordChar = '*';
return mtb;
}
}
public class MyCustomToolStripControlHost : ToolStripControlHost
{
public MyCustomToolStripControlHost()
: base(new Control())
{
}
public MyCustomToolStripControlHost(Control c)
: base(c)
{
}
}
Run Code Online (Sandbox Code Playgroud)
表单设计器的问题(运行应用程序后看不到ToolStripMaskedTextBox)没有解决,但您可以关闭设计器并再次打开文件.
然后你可以继续没有任何问题.
希望这可以帮助