gpt4 book ai didi

c# - 在 Button_Click 上围绕控件绘制边框

转载 作者:太空狗 更新时间:2023-10-29 22:55:59 28 4
gpt4 key购买 nike

当用户单击我的验证按钮(在我的 C#、WinForm、.net 3.5 应用程序中)时,我想在某个控件周围绘制一个边框(如果它是空的)。假设一个名为 tbxLastName 的文本框,我想我需要做这样的事情 -->

ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle), 
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);

不幸的是,我不知道为图形对象放置什么,因为我所拥有的什么都不做。

我遇到的所有例子,MSDN - HERE , 在 Paint 事件中包含此代码。像这样 -->

private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}

但是,我只想在满足某些条件时显示边框,这是由 Button_Click 启动的


很多建议建议使用容器对象来容纳文本框并将其称为 Paint_Event。我这样做了,出现了一个框,但不在控件周围。它出现在容器控件的左上角。这是我正在做的 -->

    private void grpImmunizationCntrl_Paint(object sender, PaintEventArgs e)
{
if (lkuNOImmunizationReason.Text.Equals(string.Empty)
{
ControlPaint.DrawBorder(
e.Graphics, lkuNOImmunizationReason.ClientRectangle,
Color.Firebrick, ButtonBorderStyle.Solid);
}
}

编辑

这就是我结合这里的建议和对我有用的建议。

    public static void HighlightRequiredFields(Control container, Graphics graphics, Boolean isVisible)
{
Rectangle rect = default(Rectangle);
foreach (Control control in container.Controls)
{
if (control.Tag is string && control.Tag.ToString() == "required")
{
rect = control.Bounds;
rect.Inflate(3, 3);
if (isVisible && control.Text.Equals(string.Empty))
{
ControlPaint.DrawBorder(graphics, rect, Color.FromArgb(173,216,230), ButtonBorderStyle.Solid);
}
else
{
ControlPaint.DrawBorder(graphics, rect, container.BackColor, ButtonBorderStyle.None);
}
}

if (control.HasChildren)
{
foreach (Control ctrl in control.Controls)
{
HighlightRequiredFields(ctrl, graphics, isVisible);
}
}
}
}

我从我需要的任何容器的 Paint_Event 中调用它。

最佳答案

您可以使用表单中的操作字段列表并添加或删除自定义绘图:

// field
List<Action<Graphics>> drawings = new List<Action<Graphics>>();

// on click event:
drawings.Add(delegate(Graphics g) {
var rect = tbxLastName.Bounds;
rect.Inflate(1, 1); // make rectange a bit larger than textbox
ControlPaint.DrawBorder(g, rect,
Color.DarkBlue, ButtonBorderStyle.Solid);
});
// make sure you added only once or clear before
panel1.Refresh(); // refresh panel to force painting


// Paint method:
foreach (var draw in drawings) {
draw(e.Graphics);
}

这样你就可以添加多个边框

关于c# - 在 Button_Click 上围绕控件绘制边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2193549/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com