我有一个库类,我添加了一个新的用户控件并添加了一个代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CustomControl
{
public partial class ExtendedTextBox : UserControl
{
[PropertyTab("Data")]
[Browsable(true)]
[Category("Extended Properties")]
[Description("Set TextBox border Color")]
public string Texts
{
get { return textBox.Text; }
set { textBox.Text = value; }
}
private TextBox textBox;
public ExtendedTextBox()
{
InitializeComponent();
textBox = new TextBox();
textBox.Multiline = true;
textBox.BorderStyle = BorderStyle.None;
this.Controls.Add(textBox);
}
private void ExtendedTextBox_Load(object sender, EventArgs e)
{
}
private void ExtendedTextBox_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
}
private void ExtendedTextBox_Resize(object sender, EventArgs e)
{
textBox.Size = new Size(this.Width - 3, this.Height - 2);
textBox.Location = new Point(2, 1);
}
}
}
当我将dll文件添加到另一个Windows窗体项目时,我将控件拖动到设计器,但在控件属性下的解决方案资源管理器中,我看不到数据而不是扩展属性而不是设置TextBox边框颜色。
我想添加一个属性,当你点击它时会给你一个子属性并点击它会打开颜色模式,这样你就可以改变/设置一个新颜色到paint事件。
现在在paint事件中它被设置为Red但我希望有一个属性,以便用户可以设置任何颜色。
答案 0 :(得分:0)
存储textBox边框颜色的属性在哪里?我只看到public string Texts
属性。您应该为textBox border添加新属性:
[PropertyTab("Data")]
[Browsable(true)]
[Category("Extended Properties")]
[Description("Set TextBox border Color")]
public Color BorderColor { get; set; }
答案 1 :(得分:0)
您在哪里定义继承Data
的{{1}}类?如果您没有自己定义,那么您希望设计师使用哪个PropertyTab
课程?
其他属性 - Data
和Category
- 对我来说很好。自定义属性显示在Description
控件的“属性”选项卡中,在其自己的“扩展属性”类别中(当然,您必须按类别对属性进行分组,而不是按字母顺序分组),并使用正确的描述文本(在PropertyGrid
)中选择属性时显示。
PropertyGrid
属性必须指定有效的PropertyTab
类。如果您没有使用PropertyTab
类,那么很明显该属性无法显示在Data
类的属性选项卡中。
答案 2 :(得分:0)
不太了解你的尝试。但是,在您的代码中需要进行一些更改之后,这对我很有用。
public partial class ExtendedTextBox : UserControl
{
[PropertyTab("Data")]
[Browsable(true)]
[Category("Extended Properties")]
[Description("Set TextBox border Color")]
public Color BorderColor { get; set; }
[PropertyTab("Data")]
[Browsable(true)]
[Category("Extended Properties")]
[Description("Set TextBox Text")]
public string Texts
{
get { return textBox.Text; }
set { textBox.Text = value; }
}
private TextBox textBox;
public ExtendedTextBox()
{
textBox = new TextBox();
textBox.Multiline = true;
textBox.BorderStyle = BorderStyle.None;
this.Controls.Add(textBox);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, BorderColor, ButtonBorderStyle.Solid);
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
textBox.Size = new Size(this.Width - 3, this.Height - 2);
textBox.Location = new Point(2, 1);
}
}
编辑:立即应用更改
你需要刷新控制BorderColor
属性捕获设置的时刻,这是不可能的自动属性,但只有完整的属性。这样:
//private field needy in full property.
private Color _BorderColor = Color.Red; //= Color.Red; for default color...
[PropertyTab("Data")]
[Browsable(true)]
[Category("Extended Properties")]
[Description("Set TextBox border Color")]
public Color BorderColor
{
get {return _BorderColor ;}
set
{
_BorderColor = value;
Invalidate(); //refresh, trigger new paint.
}
}