我有一个包含Textbox和Panel的控件。我需要从文本框中的ForeColor面板转移。我这样做但不起作用。
public Color ForeColor
{
get
{
return transparentTextBox.ForeColor;
}
set
{
transparentTextBox.ForeColor = value;
}
}
答案 0 :(得分:0)
分步执行:
不要将TextBox
和Panel
公开给外界,将它们设为私有控件(包含它们的Control
专用)。您的控件可能会显示Text等属性(然后在TextBox上获取/设置相同的属性)。
公开类型为PanelColor
的{{1}}属性。设置此属性后,请在Color
和Panel
中设置该颜色。
这样,您的TextBox
只会公开其所拥有的属性(Encapsulation原则),您可以按照自己的方式对属性更改做出反应。
答案 1 :(得分:0)
我不知道该属性是什么,但它不是override
而不是事件处理程序,因此它无法工作。我认为做你想做的最好的方法就是设置
transparentTextBox.ForeColor = pnl.ForeColor;
初始化控件。
如果其他人要更改面板的foreColor,则创建一个
的方法或属性pnl.ForeColor = givenValue;//givenValue is the value the user gave to change the panel's foreColor
transparentTextBox.ForeColor = givenValue;
例如此userControl执行此操作:
public partial class UserControl1 : UserControl
{
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.TextBox textBox1;
public UserControl1()
{
InitializeComponent();
this.panel1 = new System.Windows.Forms.Panel();
this.textBox1 = new System.Windows.Forms.TextBox();
this.panel1.Controls.Add(this.textBox1);
this.panel1.Location = new System.Drawing.Point(3, 14);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(200, 100);
this.panel1.TabIndex = 0;
this.textBox1.Location = new System.Drawing.Point(33, 15);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 0;
this.Controls.Add(this.panel1);
textBox1.ForeColor = panel1.ForeColor;
}
public Color ForeColor
{
get
{
return textBox1.ForeColor;
}
set
{
panel1.ForeColor = value;
textBox1.ForeColor = value;
}
}
}
答案 2 :(得分:0)
也许是这样的:
class MyTextBox : TextBox // custom textbox
{
protected override void OnParentForeColorChanged(EventArgs e)
{
ForeColor = Parent.ForeColor;
Invalidate();
base.OnParentForeColorChanged(e);
}
}
但还有其他解决方案。
答案 3 :(得分:0)
private Color _foreColor = null;
public Color ForeColor
{
get
{
if(_forecolor == null)
{
_foreColor = transparentTextBox.ForeColor;
}
return _foreColor;
}
}
答案 4 :(得分:0)
我有同样的问题。而不是覆盖ForeColor属性,请执行以下操作:
public UserControl1()
{
InitializeComponent();
ForeColorChanged += UserControl1_ForeColorChanged;
}
void UserControl1_ForeColorChanged(object sender, EventArgs e)
{
textBox1.ForeColor = ForeColor;
}
不是一个非常漂亮的approch,但它有效:)