gna*_*ket 8 .net c# properties groupbox winforms
我不确定这是否可行.我做了一些研究,但未能找到任何结论.还有一个类似的问题在这里,但它的WPF.
我想要做的是将自定义属性添加到我的表单上的现有WinForms GroupBox(或任何控件).对于此示例,我们将使用"链接".假设我程序中的每个GroupBox都包含一个超链接,然后我启动程序时需要做的就是这样做:
MyGroupBox.Link = "http:\\www.google.com\"
Run Code Online (Sandbox Code Playgroud)
稍后在我的程序中,我可以设置我的超链接内容来引用MyGroupBox.Link.
有可能像这样操纵Winforms控件吗?如果我不需要,我宁愿不做自定义控件.
我从这个问题中看到我可以扩展我的控制权,但在我的具体情况下我会如何看待?这与创建自定义控件相同吗?
一种方法是使用Extender Providers.当它添加到表单时,它就像ToolTip组件一样,它为该表单上的每个控件提供一个名为ToolTip的属性.您可以创建此类:
[ProvideProperty("Link", typeof(Control))]
public class ExtendControls : Component, IExtenderProvider
{
private Dictionary<Control, string> links =
new Dictionary<Control, string>();
public bool CanExtend(object extendee)
{
return !(extendee is Form);
}
public void SetLink(Control extendee, string value)
{
if (value.Length == 0)
{
links.Remove(extendee);
}
else
{
links[extendee] = value;
}
}
[DisplayName("Link")]
[ExtenderProvidedProperty()]
public string GetLink(Control extendee)
{
if (links.ContainsKey(extendee))
{
return links[extendee];
}
else
{
return string.Empty;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是为所有控件提供Link属性来处理表单.现在你在windowsforms项目中创建这个类并构建它,在你去工具箱中的表单设计器后你会看到extendcontrols组件拖动它在表单上,它将被放置在组件托盘中.几乎完成...接下来,您可以在所需控件的属性窗口中或在此类代码中使用新的链接属性(假设您将组件保留为默认值名称):
//assuming ofcourse you have a button called button1
//i used button as the example you can use panel,datagridview,label,etc...
//to set it...
extendControls1.SetLink(button1, "sometest");
//to get it back...
string myLink = extendControls1.GetLink(button1);
Run Code Online (Sandbox Code Playgroud)
我没有尝试使用GroupBox,但我想你可以在这里使用Button做类似的例子.
http://msdn.microsoft.com/en-us/library/7h62478z(v=vs.90).aspx
只需创建一个新类,称之为MyGroupBox或任何你想要的:
public class MyGroupBox : GroupBox {
private string link;
public string Link {get {return link;} set{link=value;} }
}
Run Code Online (Sandbox Code Playgroud)
这将继承GroupBox中的所有行为/属性,并为Link添加新属性.
然后你就可以这样使用它:
MyGroupBox groupBox = new MyGroupBox();
groupBox.Link = "www.google.com";
Run Code Online (Sandbox Code Playgroud)
我认为这比使用tag属性更清洁,老实说.主要是因为它不是标签,它是一个链接,我喜欢能够恰当地命名该属性.:)虽然如果你需要为许多控件而不仅仅是GroupBox执行此操作,标签可能会更容易.
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |