您好
我尝试的ExtenderProviders遇到一个问题。
ExtenderProvider让您virtualy属性添加到现有的类。我的项目作为基类使用的控制。在的DesignTime,我需要一个窗体上的控件Control.Parent的参考。
为了说明这一点,假设你有以下的琐碎类ExtenderProvider(它不会做感兴趣的东西,除了说明)。这ExtenderProvider扩展Button类。我添加了两个按钮,表格,增加了ExtenderProvider(上弹出一前一后生成的工具箱)。该按钮具有的TestString财产如预期。
问题是,一旦代码为"的EndInit",每个按钮Control.Parent仍然没有设置。 InitializeComponent的建议,应设置。而且,在运行时,它被设置,但没有设计时间。
这是由设计呢?还是我做错了什么?
代码forExtenderProvider,(从我的表)的InitializeComponent抄录如下:
using System.ComponentModel;
using System.Windows.Forms;
using System.Collections.Generic;
namespace ExtenderProviderDemo
{
[ProvideProperty("TestString", typeof(Button))]
public class ExtenderProvider:Component, IExtenderProvider, ISupportInitialize
{
Dictionary<control,> testStrings = new Dictionary<control,string>();
public ExtenderProvider() { }
public string GetTestString (Control extendee) {
if(testStrings.ContainsKey(extendee))
return testStrings[extendee];
else
return string.Empty;
}
public void SetTestString(Control extendee, string testString) {
if (testStrings.ContainsKey(extendee)) {
testStrings[extendee] = testString;
}
else
testStrings.Add(extendee, testString);
}
#region IExtenderProvider Members
public bool CanExtend(object extendee) {
return extendee is Button;
}
#endregion
#region ISupportInitialize Members
public void BeginInit() {
}
public void EndInit() {
foreach (KeyValuePair<control,> pair in testStrings) {
MessageBox.Show("Control " + pair.Key.Name + " : Parent null ? " + (pair.Key.Parent == null).ToString());
}
}
#endregion
}
}
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.extenderProvider1 = new ExtenderProviderDemo.ExtenderProvider();
((System.ComponentModel.ISupportInitialize)(this.extenderProvider1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(102, 80);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.extenderProvider1.SetTestString(this.button1, "");
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// button2
//
this.button2.Location = new System.Drawing.Point(115, 120);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 1;
this.extenderProvider1.SetTestString(this.button2, "Test");
this.button2.Text = "button2";
this.button2.UseVisualStyleBackColor = true;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.extenderProvider1)).EndInit();
this.ResumeLayout(false);
}