Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在标签后绘制额外的矩形_C#_.net_Winforms_User Controls_Panel - Fatal编程技术网

C# 在标签后绘制额外的矩形

C# 在标签后绘制额外的矩形,c#,.net,winforms,user-controls,panel,C#,.net,Winforms,User Controls,Panel,我想在我的表格中包括下面的彩色面板: 为此,我创建了自定义面板,该面板将根据单选按钮选择更改边框颜色。我的面板代码是 InfoPanel.cs class InfoPanel:面板 { 私有颜色colorBorder=颜色。透明; 公共InfoPanel() :base() { this.SetStyle(ControlStyles.UserPaint,true); } 受保护的覆盖无效OnPaint(PaintEventArgs e) { 基础漆(e); e、 绘图矩形( 新笔( 新的Sol

我想在我的表格中包括下面的彩色面板:

为此,我创建了自定义面板,该面板将根据单选按钮选择更改边框颜色。我的面板代码是

InfoPanel.cs

class InfoPanel:面板
{
私有颜色colorBorder=颜色。透明;
公共InfoPanel()
:base()
{
this.SetStyle(ControlStyles.UserPaint,true);
}
受保护的覆盖无效OnPaint(PaintEventArgs e)
{
基础漆(e);
e、 绘图矩形(
新笔(
新的SolidBrush(彩色边框),2),
e、 阴蒂;
e、 Graphics.DrawLine(新画笔(新的SolidBrush(colorBorder),0),50,0,50,50);//画一条线来拆分子和父信息面板
}
公共颜色边框颜色
{
得到
{
返回彩色边框;
}
设置
{
colorBorder=值;
}
}
}
以我的形式, 1.创建了一个父信息面板 2.创建了一个子面板和图片框 3.父信息面板中的一个标签用于显示信息

现在,对于父面板,我根据用户选择更改颜色[背面,边框]&文本;对于子面板,我不更改边框颜色,而是根据用户选择更新背面颜色

以下是更改面板颜色、图像、文本更新的代码:

private void rbIPAddress\u CheckedChanged(对象发送方,事件参数e)
{
如果(rbIPAddress.Checked)
{                
ParentInfoPanel.BackColor=System.Drawing.ColorTranslator.FromHtml(“#ffee”);
ParentInfoPanel.BorderColor=System.Drawing.ColorTranslator.FromHtml(“#DADA85”);
ChildInfoPanel.BackColor=System.Drawing.ColorTranslator.FromHtml(“#F6F6D8”);
InfoPanelPictureBox.Image=Template.InfoPanelInfoImage;
Infolabel.Text=“IP地址已配置。您可以通过选择其他配置切换到正向查找区域。*IP地址\n可以是LB IP地址之一。”;
txtBoxIPAddress.Enabled=true;
textBoxPort.Enabled=true;
}
其他的
{
Infolabel.Text=“”;
txtBoxIPAddress.Text=“”;
txtBoxIPAddress.Enabled=false;
textBoxPort.Enabled=false;
}
}
私有void rbForwardLookupZone_CheckedChanged(对象发送方,事件参数e)
{
如果(rbForwardLookupZone.Checked)
{
ParentInfoPanel.BackColor=System.Drawing.ColorTranslator.FromHtml(“#ffee”);
ParentInfoPanel.BorderColor=System.Drawing.ColorTranslator.FromHtml(“#DADA85”);
ChildInfoPanel.BackColor=System.Drawing.ColorTranslator.FromHtml(“#F6F6D8”);
InfoPanelPictureBox.Image=Template.InfoPanelInfoImage;
Infolabel.Text=“已配置正向查找区域。您可以通过选择其他配置切换到IP地址,\n更改端口号将影响防火墙规则。”;
textBoxControlPlane.Enabled=true;
if(string.IsNullOrEmpty(textBoxControlPlane.Text))
{
textBoxControlPlane.Text=Constants.DefaultControlPlaneDomain;
}
}
其他的
{
Infolabel.Text=“”;
textBoxControlPlane.Text=”“;
textBoxControlPlane.Enabled=false;
}
}
注意:使用下一行字符以多行显示标签文本


输出:一切正常,但在标签文本的末尾,我得到了另一个矩形框。我想知道为什么会这样?我做错了吗?请帮我做这个

问题是您正在使用
e.ClipRectangle
。它会通知您控件的哪个部分需要重新绘制。这有时只是控件的一小部分,而不是整个控件(在您的例子中是额外矩形的区域)。始终绘制控件的完整矩形

此外,您必须同时处理
SolidBrush
。否则会导致内存泄漏。利用资源


问题是您正在使用
e.ClipRectangle
。它会通知您控件的哪个部分需要重新绘制。这有时只是控件的一小部分,而不是整个控件(在您的例子中是额外矩形的区域)。始终绘制控件的完整矩形

此外,您必须同时处理
SolidBrush
。否则会导致内存泄漏。利用资源


@萨拉瓦纳:很高兴我能帮上忙。祝你的项目好运@萨拉瓦纳:很高兴我能帮上忙。祝你的项目好运!
using(SolidBrush brush = new SolidBrush(colorBorder))
using(Pen pen = new Pen(brush, 2))
{
    e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, this.ClientSize.Width - 1, this.ClientSize.Height - 1));
    e.Graphics.DrawLine(pen, 50, 0, 50, 50);
}